WCF 服务 API 设计

WCF Service API Design

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

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

我有以下问题:

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

  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
    

    Customer[] GetCustomers();
    Job[] GetJobs();
    
    void Updatecustomer(int customerid);
    void Updatejob(int jobid);
    ---//other operations goes here...
    

我正在寻找这两种方法之间的权衡。

提前谢谢大家..

普拉迪普

I am designing an ERP system ... which has the following modules...

我认为考虑您实际构建的内容非常重要。说您正在构建一个执行 ERP 的单一系统是没有意义的。这就是 SOA 真正有用的地方。

您实际构建的是什么:

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

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

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

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

也许您列出的每个业务功能只需要一项服务,或者您可能需要不止一项服务,例如,因为会计功能非常大并且包含多项功能。

那么,讲课结束。为了回答您的问题:

Which instancing mode should I choose?

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

Should I expose a minimal set of standard operations or should I expose large number of functions specific to problem sets?

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

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

最终你的问题是一个很好的问题,因为你可以写一本书来回答它。然而,对于这个网站,答案需要保持简短,所以我不会再继续对你说了。但是,我强烈建议您通读 SOA,尤其是关于 business capabilities, service autonomy, and about the differences RPC 和基于资源的 Web 服务之间的内容。

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