qual è l’equivalente globale Application_Start di global.asax quando si utilizza WAS in IIS7

Mi piacerebbe utilizzare netTcpBinding per la mia applicazione WCF attualmente ospitata in IIS7, che significa invece configurarla per utilizzare WAS. Questo è abbastanza semplice, tuttavia, la mia applicazione ha già utilizzato l’evento Application_Start nel file global.asax. Non ho bisogno di accedere a httpContext (che ho capito che l’accesso è stato rimosso in IIS7), tuttavia mi piacerebbe comunque collegarmi ai metodi start o init?

Esiste un equivalente quando si ospita un’applicazione in WAS come applicata a IIS7?

L’uso della modalità classica non è un’opzione (di nuovo non mi interessa il httpcontext e questo sembra funzionare solo se si utilizza un binding http) – e ho visto un esempio di mettere una class statica instide la cartella app_code che sembra una hack orribile.

Credo che AppInitialize() sia il metodo che stai cercando. Ecco un articolo su come utilizzarlo per inizializzare Castle Windsor in un servizio WCF ospitato da WAS:

Castle Windsor e servizi WCF del protocollo non HTTP

L’essenza dell’articolo è, invece di usare Application_Start() che non verrà chiamato in WAS:

 protected void Application_Start(object sender, EventArgs e) { var container = new WindsorContainer("ioc.config"); DefaultServiceHostFactory.RegisterContainer(container.Kernel); } 

Uso:

 public class InitialiseService { ///  /// Application initialisation method where we register our IOC container. ///  public static void AppInitialize() { var container = new WindsorContainer("ioc.config"); DefaultServiceHostFactory.RegisterContainer(container.Kernel); } } 

Per citare Matt:

Confesso che ho passato un po ‘di tempo a esaminare la Factory Host in modo più dettagliato, cercando di avvolgere DefaultServiceHostFactory . Tuttavia, sembra esserci una soluzione molto più semplice e che consiste nell’utilizzare il piccolo metodo AppInitialize documentato. Se si crea una class (qualsiasi class), la si inserisce nella cartella App_Code ASP.NET nel progetto e gli si fornisce una firma del metodo come definito di seguito, questo piccolo bambino verrà licenziato esattamente quando lo si desidera. Puoi quindi inizializzare il tuo contenitore IoC lì.

AppInitialize è un metodo valido per inizializzare il servizio. Ma ci sono altri metodi che potrebbero funzionare meglio per te e sono descritti in questo articolo: Come inizializzare i servizi WCF ospitati