正确设计 WCF 服务

Designing a WCF Service properly

我需要在工作中创建一个 WCF 服务,该服务将处理来自同一台机器上不同客户端的请求,并且可以选择来自不同机器但在公司网络上的客户端(来自程序员计算机 - 用于调试目的)。 我需要一些关于如何创建服务的建议,因为我是 WCF 的初学者。

该服务将从客户端获取请求,以在主机上的 h/w 设备上执行不同的操作。 该服务需要包含多个模块以支持各种 h/w 设备。 编写客户端代码的程序员将使用这些模块对象来执行操作。 每个模块都需要支持面向客户端的事件和异常抛出。

我想知道几件事:

  1. 是否有可能以某种方式将方法文档导出到 客户?因为最好,当客户端代码被 写好了,程序员就能看到到底是什么方法 是什么,抛出什么异常等等。我看到有一个 将 API dll 共享给客户端的方法(请记住,大多数 客户端将 运行(并编码)在使用 .NET 的同一台机器上。
  2. 是否可以只在服务中抛出异常 实施方法?我想使用大部分 .NET 功能 例外是其中之一:)
  3. 该服务将处理来自不同线程的请求 客户端,是否可以使用线程信息(如线程 Id) 或任何其他方式来执行锁定机制?为了 例如,如果同一客户端的两个线程使用相同的 h/w 设备通道第二个将被阻止直到第一个 完成了。
  4. 最后,我想知道什么是最好的端点和 此服务的配置?

我知道很多,但我阅读了基础知识,但我不能完全确定什么是实现这些要求的正确方法。

提前致谢。

1 - 是的。正如您所说,您可以共享 API dll,而且您可以使用 Mex 端点来提供有关您的服务的文档:https://social.msdn.microsoft.com/Forums/vstudio/en-US/3def9d4f-ae3e-468b-90e6-3a069bac6376/when-to-use-wcf-mex-endpoint

2 - 是的。每当出现问题并且未在其自己的应用程序中捕获时,WCF 将 FaultException 抛出并发送到客户端。

3 - 客户端 运行 在他们自己的线程中或在线程池中(我记不太清了,但这应该不重要)。您仍然可以毫无问题地为客户端使用多线程功能。 WCF 本身是线程安全的,在客户端方面是明智的。它基本上抽象了所有内容,以使其看起来像 运行 是每个用户的完整专用应用程序。

4 - 此应用程序是 web 还是 desktop?如果您要使用 web,我建议使用 nethttpbinding 以确保可靠性。如果您使用 desktop,您可以使用 nettcpbinding.

获得更好的性能结果