正确设计WCF服务

时间:2015-06-02 18:17:59

标签: c# .net wcf

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

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

我想知道几件事:

  1. 是否有可能以某种方式将方法文档导出到 客户呢?因为最好是在客户端代码出现时 编写后,程序员将能够准确地看到该方法 是什么,抛出什么异常等等。我看到有一个 将API dll共享给客户端的方法(请记住大多数情况 客户端将使用.NET在同一台机器上运行(和编码)。
  2. 是否可以在服务中抛出异常 实施方法?我想要使​​用大多数.NET功能 例外是其中之一:)
  3. 该服务将处理来自不同线程的请求 客户端,是否可以使用线程信息(如线程) Id)或以任何其他方式执行锁定机制?对于 例如,如果同一客户端的两个线程使用相同的h / w 设备通道第二个将被阻塞,直到第一个 完了。
  4. 最后,我想知道什么是最好的终点和 这项服务的配置?
  5. 我知道这很多,但我阅读了基础知识,我无法确定实现这些要求的正确方法。

    提前致谢。

1 个答案:

答案 0 :(得分: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 - 此应用程序是网络还是桌面?如果您使用网络,我建议使用nethttpbinding来确保可靠性。如果您使用桌面,则可以使用nettcpbinding获得更好的效果结果。