【问题标题】:Starting self hosted WCF services on demand按需启动自托管 WCF 服务
【发布时间】:2011-07-04 13:11:23
【问题描述】:

是否可以按需启动自托管 WCF 服务?

我看到了两个选项来实现这一点:

  • 在自托管 WCF 的 Web 服务器中插入一个侦听器,并在对特定服务的请求进入时启动服务主机,然后 WCF 开始寻找该端点的存在;或

  • 在进程中集成 Web 服务,如果请求尚未运行,则启动服务主机并将请求重定向到该服务主机(就像我怀疑 IIS 所做的那样)。

我不能使用 IIS 或 WAS,因为 Web 服务需要在 UI 业务逻辑的进程中运行。

哪一种可行,我该如何实现?

编辑:
我不能只启动服务主机,因为有数百个,其中大多数(约 95%)(几乎)从未使用过但需要可用。这是为了公开 900 个实体的业务逻辑层。

【问题讨论】:

  • 为什么不能直接启动服务主机并完成?
  • 有数百个,其中大多数(约 95%)(几乎)从未使用过但需要可用。这是为了公开 900 个实体的业务逻辑层。

标签: c# .net wcf web-services self-hosting


【解决方案1】:

您可以进行定位器服务设置。基本上总是公开一个返回“实际”服务地址的轻量级服务。每次请求特定服务的地址时,请继续并启动它。

如果您担心清理它,您可以保留服务主机列表并在某种不活动超时中连接,以便您可以定期关闭服务主机。

这里有一些设计问题 - “在调用另一个服务之前调用一个服务”的概念在某种程度上可能被认为是一个坏主意(听起来像是耦合两个服务的状态)。

【讨论】:

  • 这将有很长的路要走,尽管客户端无法缓存结果。如果所有客户端都在他们发出任何请求之前执行该请求,那么这将是可靠的唯一方法。我认为这样做的开销太高了。
【解决方案2】:

走了以下路线:

  • 创建单个服务主机;

  • 创建一个实现所有服务接口的动态代理;

  • 为动态代理实现的每个接口添加一个服务端点;

  • 从动态代理分派到正确的实现。

【讨论】:

  • 这听起来很漂亮 - 你有没有机会在某处发布这种方法的示例?
  • 这并不难 :),但是将其发布在某个地方是个好主意。我没有博客。你有什么建议我可以在哪里发布?
  • 你总是可以把它放在 CodeProject 上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多