1

我是 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
    

    或者

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

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

先谢谢大家了。。

普拉迪普

4

1 回答 1

2

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

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

您实际构建的内容:

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

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

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

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

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

所以,讲完。为了回答您的问题:

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

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

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

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

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

最终,您的问题是一个很好的问题,因为您可以写书来回答它。但是,对于这个网站,答案需要保持简短,所以我将不再对你说。但是,我强烈建议您阅读 SOA 的一般内容,尤其是关于业务能力服务自治以及RPC 和基于资源的 Web 服务之间的区别。

专门针对 WCF(如果这是您正在使用的技术),您可以研究高性能 WCF 服务

于 2015-09-17T10:29:19.913 回答