我是WCF的新手。我正在设计一个基于WCF / WPF的ERP系统,它有以下模块:
a)估算
b)计划
c)调度
d)会计
e)库存
我有以下问题:
我应该选择哪种实例模式?该应用程序将通过Intranet托管在单独的可执行文件上。对于每个模块,将有大约500-1000个并发用户连接到服务器。所有客户端都通过TCP / IP连接。使用的数据库是SQL Server。
如何设计我的服务API?我应该公开一组最小的标准操作,还是应该公开大量特定于问题集的函数?更准确地说,您认为以下哪一种方法可以实现?
Object[] Get(EntityType type);
void Send(OperationType type, Object[] params);
void Delete(Object[] entities);
----other basic ops and overloads.//based on the parameters, service will //delegate to specific operations
OR
Customer[] GetCustomers();
Job[] GetJobs();
void Updatecustomer(int customerid);
void Updatejob(int jobid);
---//other operations goes here...
我正在寻找这两种方法之间的权衡。
提前感谢你们..
与Pradeep
答案 0 :(得分:2)
我正在设计一个ERP系统......它有以下模块......
我认为考虑你实际建设的内容非常重要。要说你正在建立一个单一的ERP系统是毫无意义的。这是SOA真正有用的地方。
您实际构建的是什么:
我强烈建议您开始将这些单独的服务构建为完全独立的系统。这些服务中的每一项都应该有
使SOA正确的关键是能够在适当的级别组合您的服务。通常为您要支持的每个业务功能创建服务或多个服务。
例如,您可能每个业务功能只需要一个服务,或者您可能需要多个服务,因为会计功能非常大并且包含多个功能。
所以,讲课。为了回答你的问题:
我应该选择哪种实例模式?
对于演出,您应该使用每次通话。这对于高容量来说是最有效的,因为每个调用都被分派到一个新的服务实例,该服务实例仅在调用操作期间存在。如果您希望所有客户端也是WCF,那么您应该使用netTcpBinding。
我应该公开一组最小的标准操作,还是应该公开大量特定于问题集的函数?
这取决于很多事情。这里没有规则,但一个指导原则是,给定业务能力中的服务之间的通信可以通过资源和基于HTTP的操作(GET,POST等)来完成。这是因为在业务能力范围内,期望由一个服务公开的实体或资源对消费服务具有意义是合理的。
然而,不同业务领域的服务之间的通信应该更像后一个例子;显式的业务级操作,这些操作在业务域之外具有意义。
最终你的问题很棒,因为你可以写书回答它。但是,对于这个网站,答案需要保持简短,所以我会停止继续你。但是,我强烈建议您阅读一般的SOA,特别是关于business capabilities,service autonomy以及RPC和基于资源的Web服务之间的differences。
对于WCF(如果这是您正在使用的技术),您可以研究high performance WCF services