代码之家  ›  专栏  ›  技术社区  ›  HaxElit

WCF多个服务合同

  •  0
  • HaxElit  · 技术社区  · 15 年前

    我是WCF的新人,我想知道如何设计我的设计。 我希望公开所有域对象的方法,以便能够获取和设置它们的属性。我把它们都分成了自己的接口。即)

    public interface IGroupDAO {
        IEnumerable<Group> FindGroup(string criteria);
        Group GetGroup(int groupID);
        IEnumerable<Group> GetSubGroups(int groupID);
        List<IDMatch> UpdateGroups(Group[] groups);
    }
    public interface IUserDAO {
        IEnumerable<User> FindUser(string criteria);
        IEnumerable<User> GetSubUsers(int userID);
        User GetUser(int userID);
        List<IDMatch> UpdateUsers(User[] users);
    }
    ... etc
    

    根据我的理解,如果您为每个服务合同创建一个端点,那么端点都是分离的,对吗?我问的原因是我是否想创建一个包含所有更新语句的事务。即)

    CreateTransaction();
    UpdateGroups(groups);
    UpdateUsers(user);
    CommitTransaction();
    

    如果我单独公开所有服务合同,这是否可能?我想确保在提交事务之前保存所有内容,这样就不会使数据模型处于未知状态。

    我的一个想法是把所有接口聚合在一起

    public interface IAppDAO : IGroupDAO, IUserDAO {}
    

    这样,我可以公开所有内容,并在需要时轻松地重新排序服务的更新。因此,如果我必须在用户之前保存一个子组,那么我可以保存其余的组或任何类似的奇怪情况。我想在服务中保留所有的保存逻辑,这样客户机就可以哑口无言地说“保存所有这些东西”,然后在提交时,服务应该正确地重新排序所有东西,并更新正确的源代码。

    如果我疯了或者我可以用另一种方式来设计,请告诉我?

    谢谢

    还有一个问题……如果我公开多个服务合同,我必须分别连接到每个服务合同,对吗?所以我必须分别对每一个进行身份验证?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Darin Dimitrov    15 年前

    实际上,您不需要将DAO接口公开为服务契约。定义一个单独的服务契约接口,该接口将包含例如方法 Update :

    [ServiceContract]
    public interface IMyServiceContract
    {
        [OperationContract]
        void Update(User[] users, Group[] groups);
    }
    
    public class MyService : IMyServiceContract
    {
        private readonly IUserDAO _userDao;
        private readonly IGroupDAO _groupDao;
        public MyService(IUserDAO userDao, IGroupDAO groupDao)
        {
            _userDao = userDao;
            _groupDao = groupDao;
        }
    
        public void Update(User[] users, Group[] groups)
        {
            _groupDao.UpdateGroups(groups);
            _userDao.UpdateUsers(users);
        }
    }
    

    你可以 implement 风俗习惯 IOperationInvoker 并将其插入WCF以处理事务。

        2
  •  0
  •   Sky Sanders    15 年前

    我不会说“疯狂”。我想说,你应该读一些关于OOP和SOA的文章,或许,嗯,还应该读一些做这种事情的项目的源代码。

    你的计划告诉我,没有WCF经验不是这里的突出问题。你需要从根本上掌握系统设计,否则你会发现自己在追逐鬼魂。

    当你准备好了,每个请求的会话就是与你的问题相关的搜索内容。

    玩得高兴。