我是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)我还有一个问题......如果我公开多个服务合同,我必须单独连接到每个合同吗?所以我必须分别对每个人进行身份验证?
答案 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以处理交易。