我想将netTcpBinding用于我的WCF应用程序,该应用程序当前托管在IIS7中,这意味着将其配置为使用WAS。这是相当直接的,但是,我的应用程序以前在global.asax文件中使用了Application_Start事件。我不需要访问httpContext(我理解IIS7中已经删除了访问权限),但我还是想挂钩启动或初始化方法?
在WAS中托管与IIS7相关的应用程序时是否存在等效项?
使用经典模式不是一个选项(我再次对httpcontext不感兴趣,如果使用http绑定,这似乎只能工作) - 我已经看到了一个将静态类加入app_code文件夹的示例看起来像一个可怕的黑客。
答案 0 :(得分:26)
我相信AppInitialize()
是您正在寻找的方法。这是一篇关于使用它在WAS托管的WCF服务中初始化Castle Windsor的文章:
本文的实质是,而不是使用在WAS中不会被调用的Application_Start()
:
protected void Application_Start(object sender, EventArgs e)
{
var container = new WindsorContainer("ioc.config");
DefaultServiceHostFactory.RegisterContainer(container.Kernel);
}
使用:
public class InitialiseService
{
/// <summary>
/// Application initialisation method where we register our IOC container.
/// </summary>
public static void AppInitialize()
{
var container = new WindsorContainer("ioc.config");
DefaultServiceHostFactory.RegisterContainer(container.Kernel);
}
}
引用马特:
我承认我花了一些时间更详细地看看主机工厂, 期待包装
DefaultServiceHostFactory
。但是,出现了 是一个更简单的解决方案,那就是利用一点点 记录了AppInitialize方法。如果你创建一个类(任何类), 将它放入项目的ASP.NETApp_Code
文件夹中并给它一个 方法签名定义如下,这个小宝贝会被解雇 确切地说你想要它。然后,您可以初始化您的IoC 容器在那里。
答案 1 :(得分:13)
AppInitialize是初始化服务的有效方法。但是有一些其他方法可能对您更有效,本文将对它们进行描述:How to Initialize Hosted WCF Services