【问题标题】:Framework for hosting WCF services in Windows Service在 Windows 服务中托管 WCF 服务的框架
【发布时间】:2009-11-10 13:23:20
【问题描述】:

有谁知道可以让我在 Windows 服务中轻松托管和配置 WCF 服务的框架?

最初我开发了一个系统,其中单个主机应用程序包含每个服务主机一个 Windows 服务,以便管理员可以在服务小程序中单独管理这些服务。

但是,随着越来越多的 WCF 服务需要以这种方式托管,其他系统正在上线,并且越来越多的人担心这将变得过于复杂而无法通过服务小程序进行管理。

上述要求是我们需要能够配置 Windows 服务中托管的服务、根据需要启动和停止它们,并允许轻松部署。

我相信在服务中我们可以托管一个管理 WCF 服务,它允许我们控制其他服务的行为,但是如果有人已经为此创建了一个框架,我非常乐意使用具有已经被发明出来了。

【问题讨论】:

  • 我一直很忙,并希望其他人能在额外的一天内提供更合适的答案,但是,现在看来没有人解决我遇到的问题,我将不得不实现我自己的框架

标签: wcf


【解决方案1】:

嗯,在 Windows NT 服务中托管 WCF 服务并不是那么难 - 所以我认为没有可用的大“框架”...

基本上,你需要

  • 为您要托管的每个 WCF 服务声明一个 ServiceHost 变量
  • 在 NT 服务的 OnStart() 方法覆盖中,您实例化并打开服务主机
  • 在 NT 服务的OnStop() 方法中,再次关闭服务主机

这就是全部 - 那么在这种情况下,您希望将哪个方面委托给框架?您还有哪些其他方面或问题需要处理?

如果您想影响单个 NT 服务中的单独服务实例,您必须检查您的 NT 服务类上的 OnCustomCommand 方法覆盖。

从外部,您可以创建一个ServiceController,然后在该控制器上调用ExecuteCommand。不幸的是,您只能发送一个 int 作为参数。

所以我想在这种情况下,您必须定义例如每个服务的“服务常数”,例如const int MyService1 = 10; const int MyServive2 = 20; 然后使用该基本服务常量来启动 WCF 服务,该基本常量 + 1 来停止它,或者类似的东西。

【讨论】:

  • 这就是我目前拥有的,但我们希望从单个 Windows 服务托管多个服务,但动态管理哪些 WCF 服务在该服务中运行
  • 啊,好吧,所以您希望能够向 NT 服务发出信号以关闭或重新启动托管的 WCF 服务?听起来是个好主意,但我认为(目前)还没有任何框架——由你来创建它并与 WCF 世界分享!
  • 创建一个在同一服务中运行的“管理”或“管理员”主机,该主机能够关闭其他主机。那应该可以解决问题...
  • 我认为我必须这样做,希望我的老板会让我把它贴在 Codeplex 或其他地方
【解决方案2】:

此应用似乎与您正在寻找的某些内容相匹配。它可以动态托管 wcf 服务并具有用于管理它的 UI。


(来源:wcfstorm.com

应用程序:http://www.wcfstorm.com/wcf/getting-started-with-wcfstormhost.aspx

【讨论】:

    【解决方案3】:

    这归结为个人意见。我认为通过标准 MMC 管理单元控制一百个不同的服务没有问题。它还允许网络管理员使用 WMI、PowerShell、商业工具等对整个域进行集中管理。如果你使用自己的管理系统,你就放弃了这种简单的集中控制。

    至于部署,只需创建一个自定义操作即可一次性安装所有服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      相关资源
      最近更新 更多