因此,我将通过自托管(在 WindowsService 中)WebServiceHost(不确定如何使用 ServiceHost 处理 HTTP GET/POST)提供一些功能,其中一个功能可能会被大量调用。此函数还将依赖于 appdomain 中的连接(由 WindowsService 托管,因此它可以在多个请求上保持事件状态)。

我有以下担忧,非常感谢您提供任何意见/想法/评论:

  • 并发访问 - WebServiceHost 如何处理一堆并发请求。它们是按顺序排队和处理还是自动创建契约(Contract)的新实例?
  • WebServiceHost -> WindowsService 通信 - 我需要从 WebServiceHost 到托管 WindowsService 的某种形式的通信,例如请求不存在的新 session 。也许实现一个类,用 WindowsService 订阅的事件扩展 WebServiceHost ......(除非有另一种方式我可以在发出请求时在 WindowsService 中触发一个事件......)
  • 多个 WebServiceHosts 或 Contracts - 在不同线程中运行多个 WebServiceHost 实例(也许每个端点一个?)是否会带来真正的性能提升 - 更好地理解第一点可能会有所帮助。
  • WSDL - 我不知道为什么(可能只是需要做更多的阅读),但我不确定如何让 WebServiceHost 基本端点响应描述可用契约(Contract)的 WDSL 文档。不需要,因为所有操作都将通过 GET 请求完成,这不太可能改变,但最好有...

  • 暂时就是这样;) 我在 WCF 上阅读了很多,希望我很久以前就开始使用它,但肯定还在学习。

    最佳答案

    并发访问 - 这是您可以使用 ServiceBehaviorAttribute 设置的内容。有多种选择——您可以让 WCF 为每个传入请求创建服务类的新实例,或者您可以让单个实例处理所有请求。此外,您可以告诉 WCF 是串行还是并发地传递请求。

    WebServiceHost -> WindowsService 通信。我想到了两种方法: WCF 支持一种称为“众所周知的实例”的模式,您可以将服务的实例传递给 ServiceHost 构造函数,而不是传递 Type 并让 WCF 为您实例化它。使用此模式,您可以通过引用回您的托管代码(或者您可以使用事件)来预配置您的服务实例。如果您想保持实例化的灵活性,另一种方法是在您的托管代码中有一个静态方法,WCF 服务可以回调该方法。

    多个 WebServiceHosts 或 Contracts - 拥有多个 ServiceHost 实例确实没有优势。另请参阅此 SO 线程: What are the benefits for several servicehosts? Does one ServiceHost support several simultaneous connections on one endpoint?

    WSDL - 虽然您可以通过打开元数据发布 (http://msdn.microsoft.com/en-us/library/ms788760.aspx) 来启用 WSDL,但 WSDL 支持旨在用于基于 SOAP 的服务,而不是纯 HTTP GET/POST。为您的服务自动生成的 WSDL 可能不是很有用。

    关于wcf - 自托管 WCF 服务主机/WebServiceHost 并发/性能设计选项 (.NET 3.5),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2823553/

    10-10 23:56