4

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

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

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

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

4

1 回答 1

5

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

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

多个 WebServiceHost 或合同 - 拥有多个 ServiceHost 实例实际上没有任何优势。另请参阅此 SO 线程:多个服务主机有什么好处?一个 ServiceHost 是否支持一个端点上的多个同时连接?.

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

于 2010-05-13T00:10:06.543 回答