WCF多服务合同

时间:2010-02-19 17:13:24

标签: c# .net wcf

我是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 {}

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

如果我疯了,或者我能以不同的方式构建这个,请告诉我吗?

由于

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

2 个答案:

答案 0 :(得分:0)

我不会说'疯狂'。我想你应该做一些关于OOP和SOA的阅读,也许,嗯,为那些做这类事情的项目阅读一些源代码。

您的计划向我表明,WCF缺乏经验并不是这里的突出问题。你需要从根本上更好地掌握系统设计,否则你会发现自己在追逐鬼魂。

当您准备就绪时,要搜索的内容与您的问题相关,是针对每个请求的会话。

玩得开心。

答案 1 :(得分:0)

您实际上不需要将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以处理交易。