WCF服务API设计

时间:2015-09-17 06:03:23

标签: wcf soa wcf-instancing

我是WCF的新手。我正在设计一个基于WCF / WPF的ERP系统,它有以下模块:

a)估算
b)计划
c)调度
d)会计
e)库存

我有以下问题:

  1. 我应该选择哪种实例模式?该应用程序将通过Intranet托管在单独的可执行文件上。对于每个模块,将有大约500-1000个并发用户连接到服务器。所有客户端都通过TCP / IP连接。使用的数据库是SQL Server。

  2. 如何设计我的服务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...
    
  3. 我正在寻找这两种方法之间的权衡。

    提前感谢你们..

    与Pradeep

1 个答案:

答案 0 :(得分:2)

  

我正在设计一个ERP系统......它有以下模块......

我认为考虑你实际建设的内容非常重要。要说你正在建立一个单一的ERP系统是毫无意义的。这是SOA真正有用的地方。

您实际构建的是什么:

  • 通过提供估算业务能力满足估算业务用例的服务(或服务)
  • 通过提供规划业务能力来满足规划业务用例的服务(或服务)
  • 通过提供XXXX业务功能满足XXXX业务用例的服务(或服务)

我强烈建议您开始将这些单独的服务构建为完全独立的系统。这些服务中的每一项都应该有

  • 单独的代码库
  • 单独的数据库(非常重要!)
  • 单独部署机制

使SOA正确的关键是能够在适当的级别组合您的服务。通常为您要支持的每个业务功能创建服务或多个服务。

例如,您可能每个业务功能只需要一个服务,或者您可能需要多个服务,因为会计功能非常大并且包含多个功能。

所以,讲课。为了回答你的问题:

  

我应该选择哪种实例模式?

对于演出,您应该使用每次通话。这对于高容量来说是最有效的,因为每个调用都被分派到一个新的服务实例,该服务实例仅在调用操作期间存在。如果您希望所有客户端也是WCF,那么您应该使用netTcpBinding。

  

我应该公开一组最小的标准操作,还是应该公开大量特定于问题集的函数?

这取决于很多事情。这里没有规则,但一个指导原则是,给定业务能力中的服务之间的通信可以通过资源和基于HTTP的操作(GET,POST等)来完成。这是因为在业务能力范围内,期望由一个服务公开的实体或资源对消费服务具有意义是合理的。

然而,不同业务领域的服务之间的通信应该更像后一个例子;显式的业务级操作,这些操作在业务域之外具有意义。

最终你的问题很棒,因为你可以写书回答它。但是,对于这个网站,答案需要保持简短,所以我会停止继续你。但是,我强烈建议您阅读一般的SOA,特别是关于business capabilitiesservice autonomy以及RPC和基于资源的Web服务之间的differences

对于WCF(如果这是您正在使用的技术),您可以研究high performance WCF services