我们正在开发一个CRM应用程序。所有业务逻辑和数据访问都通过WCF服务。我们有2个选项用于WCF和客户端之间的通信(目前为:ASP.NET MVC 2)WCF单个与多个操作?设计理念
一个选项是每个操作的创建方法。实施例
GetCustomers()
GetCustomersWithPaging(int take, int skip)
GetCustomersWithFilter(string filter)
GetCustomersWithFilterPaging(string filter, int take, int skip)
or // new .net 4 feature
GetCustomers(string filter = null, int take = 0, int skip = 0)
... list goes..
另一个选择是创建名为
响应InvokeMessage(Messege请求)通用单一服务操作。实施例
wcfservice.InvokeMessage(
new CustomerRequest {
Filter = "google",
Paging = new Page { take = 20, skip = 5}
});
// Service Implementation.
public Response InvokeMessage(Message request)
{
return request.InvokeMessage();
}
InvokeMessage =通用单一服务呼叫的所有操作。
CustomerRequest =从消息抽象类继承的类,所以可创建从Message基类的多个类依赖于输入的要求。 这是CustomerRequest类。
public class CustomerRequest : Message
{
public string Filter {get;set;}
public Page Paging {get;set} // Paging class not shown here.
Public override Response InvokeMessage()
{
// business logic and data access
}
}
编辑
public abstract class Message
{
public abstract Response InvokeMessage();
}
//所有服务电话将通过InvokeMessage方法只,但具有不同的消息请求。
基本上我能避免各服务调用的和代理紧密等。 一个使用这种方法直接影响是,我不能使用这项服务作为REST
什么是推荐的方法,如果该服务需要调用大量的方法?
谢谢。
我个人的看法是,设计一个伟大的WS通常会很困难。简单地将后端数据反馈到客户端是不够的。这真的归结为定义,而不是反刍。如果你有可能想要公开这个WS,不要去看InvokeMessage路由,但是如果这只是产品内部的一种通信形式,我认为它不重要。 – 2010-10-12 20:33:33
它是内部的,但正如您在将来所说的那样,它可能需要向公众公开某些功能;我认为在这些情况下,最好通过WCF数据服务或类似方法公开有限的功能。谢谢你的评论。 – ash 2010-10-12 20:46:06
我同意Aaron的设计伟大的WS是一项艰巨的任务。考虑到这一点,我会说现在不用担心“未来的一部分”。现在让您的服务为您的内部应用程序工作,并在您遇到问题时跨过桥梁。 – 2010-10-12 21:07:12