wcf - ¿Cuál es el equivalente de Application_Start global.asax cuando se usa WAS en IIS7?
iis-7 global-asax (2)
Me gustaría utilizar netTcpBinding para mi aplicación WCF que está actualmente alojada en IIS7, lo que significa configurarla para usar WAS en su lugar. Sin embargo, esto es bastante directo, mi aplicación utilizó previamente el evento Application_Start en el archivo global.asax. No necesito acceso al httpContext (que entiendo que se eliminó el acceso en IIS7). Sin embargo, me gustaría conectarme a los métodos start o init.
¿Existe un equivalente cuando se aloja una aplicación en WAS como apposed a IIS7?
Usar el modo clásico no es una opción (de nuevo, no estoy interesado en el httpcontext y esto solo parece funcionar si utilizo un enlace http) - y he visto un ejemplo de poner una instilación de clase estática en la carpeta app_code que se parece a una horrible hack.
AppInitialize es un método válido para inicializar su servicio. Pero existen algunos otros métodos que podrían funcionar mejor para usted y se describen en este artículo: Cómo inicializar los servicios alojados de WCF
Creo que AppInitialize()
es el método que estás buscando. Aquí hay un artículo sobre cómo usarlo para iniciar Castle Windsor en un servicio WCF alojado en WAS:
La esencia del artículo es, en lugar de usar Application_Start()
que no se llamará en WAS:
protected void Application_Start(object sender, EventArgs e)
{
var container = new WindsorContainer("ioc.config");
DefaultServiceHostFactory.RegisterContainer(container.Kernel);
}
Utilizar:
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);
}
}
Para citar a Matt:
Confieso que pasé un tiempo mirando la Fábrica de Host con más detalle, buscando ajustar
DefaultServiceHostFactory
. Sin embargo, parece haber una solución mucho más simple y es utilizar el poco documentado método AppInitialize. Si crea una clase (cualquier clase),App_Code
en la carpetaApp_Code
ASP.NET en su proyecto y dele una signatura de método como se define a continuación, este pequeño bebé será despedido exactamente cuando usted lo desee. A continuación, puede inicializar su contenedor IoC allí.