代码之家  ›  专栏  ›  技术社区  ›  Ian Johnson

在Windows服务中承载WCF服务的框架

wcf
  •  1
  • Ian Johnson  · 技术社区  · 15 年前

    有人知道一个框架可以让我在Windows服务中轻松地托管和配置WCF服务吗?

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

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

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

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

    3 回复  |  直到 14 年前
        1
  •  0
  •   user316221    14 年前

    似乎这个应用程序与你正在寻找的内容相匹配。它可以动态地承载WCF服务,并具有用于管理该服务的UI。

    alt text http://www.wcfstorm.com/wcf/Data/Sites/1/WcfStormHost/wcfstormHost-Main.png 应用程序: http://www.wcfstorm.com/wcf/getting-started-with-wcfstormhost.aspx

        2
  •  2
  •   marc_s    15 年前

    嗯,在WindowsNT服务中托管WCF服务并不是那么困难,所以我认为没有一个大的“框架”可用于此…

    基本上,你需要

    • 宣布 ServiceHost 要承载的每个WCF服务的变量
    • OnStart() 方法重写NT服务,实例化并打开服务主机
    • OnStop() 方法,再次关闭服务主机

    这就是所有的东西——那么在这个场景中,您希望委托给框架什么方面呢?您还有哪些其他需要处理的方面或问题?

    如果要影响单个NT服务内的单独服务实例,则必须签入 OnCustomCommand 方法重写NT服务类。

    从外部,您可以创建 ServiceController 然后打电话 ExecuteCommand 在那个控制器上。很遗憾,您只能发送一个 int 作为参数。

    所以我想在这种情况下,您必须为每个服务定义一个“服务常量”,例如。 const int MyService1 = 10; const int MyServive2 = 20; 然后使用这个基本服务常量来启动WCF服务,使用这个基本常量+1来停止它,或者使用这些行中的某些内容。

        3
  •  0
  •   Christian Hayter    15 年前

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

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