【问题标题】:Self hosted WCF ServiceHost/WebServiceHost Concurrency/Peformance Design Options (.NET 3.5)自托管 WCF ServiceHost/WebServiceHost 并发/性能设计选项 (.NET 3.5)
【发布时间】:2011-02-18 21:28:48
【问题描述】:

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

我有以下顾虑,非常感谢任何输入/想法/cmets:

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

暂时就是这样 ;) 我已经阅读了很多关于 WCF 的内容,并希望我很久以前就开始了解它,但肯定还在学习。

【问题讨论】:

    标签: wcf concurrency servicehost self-hosting


    【解决方案1】:

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

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

    多个 WebServiceHosts 或合同 - 拥有多个 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 可能不会很有用。

    【讨论】:

    • 非常感谢 alexdej,特别是主机/服务通信评论。我希望我有更多的时间来处理设置 wcf 服务主机时可用的无数选项。再次感谢,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2012-01-25
    • 2011-03-01
    相关资源
    最近更新 更多