wcf - 自托管 WCF 服务主机/WebServiceHost 并发/性能设计选项 (.NET 3.5)

标签 wcf concurrency servicehost self-hosting

因此,我将通过自托管(在 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/

    相关文章:

    Java 电子邮件发送队列 - 固定数量的线程发送尽可能多的可用消息

    objective-c - 如何在只处理最新请求的 iOS 中实现工作队列?

    wcf - 如何删除 ServiceHost 持有的大对象堆上的 Byte[]

    c# - 以编程方式发现服务主机服务类型

    c# - 使用 DI 和 InstanceContextMode.Percall 的自定义 ServiceHost

    c# - WCF服务调用

    c# - 如何为 IIS 上托管的 WCF 服务指定端点地址?

    java - CompletableFuture 未在超时时完成

    wcf - 在以编程方式构造的端点上声明性地配置 WCF 行为扩展

    wcf - 通过文件传输WCF服务开发自定义文件同步提供程序