在IIS / WAS中托管的非HTTP WCF服务中初始化代码的适当位置?

时间:2012-02-03 00:24:50

标签: wcf msmq netmsmqbinding msmq-wcf

我的理解是,在IIS / WAS中托管时,为net.msmq配置的WCF服务不会作为HttpApplication运行,这意味着您不会在Global(Application_Start是重要的)中获取事件。我在这方面是否正确?

使用Windows Server AppFabric自动启动服务是否通过HTTP命中服务,导致Application_Start事件触发?如果是这样,这可靠吗?

我想我的真正的问题是,非HTTP WCF服务的初始化代码的“正确”位置在哪里?

特别是(因为不同的东西,正确的地方可能会有所不同):

  • IoC注册
  • log4net初始化
  • 验证MSMQ队列是否存在于本地(正如Juval Lowy在他的WCF书中所建议的那样)

后续问题:自定义IServiceBehavior中的事件是针对每个请求触发还是仅在启动时触发一次?那么ServiceHost.OnOpening() - 每个请求还是只在启动时一次? (我的测试显示它只有一次,但是有人知道WCF“生命周期”的记录在哪里,因为我似乎无法在任何地方找到它。)

1 个答案:

答案 0 :(得分:1)

我无法验证IIS / WAS中托管的WCF服务是否可以配置为支持Application_Start,但不需要执行您想要的操作。我建议您与自定义ServiceHostFactory(对于WAS)一起创建自定义ServiceHost。这种方法记录在MSDN articlethis blog post中。使用此方法,您可以在IIS / WAS,Windows服务或控制台应用程序中托管服务,因为初始化过程将是相同的。