web-dev-qa-db-ja.com

IIS7でWASを使用する場合のglobal.asax Application_Startと同等の機能

現在IIS7でホストされているWCFアプリケーションにnetTcpBindingを使用したいと思います。つまり、WASを使用するように構成します。これはかなり単純ですが、私のアプリケーションは以前、global.asaxファイルのApplication_Startイベントを使用していました。 httpContextへのアクセスは必要ありません(IIS7でアクセスが削除されたことを理解しています)が、startメソッドまたはinitメソッドにフックしたいのですか?

IIS7のようにWASでアプリケーションをホストする場合、同等のものはありますか?

クラシックモードの使用はオプションではありません(ここでも、httpcontextには興味がなく、これはhttpバインディングを使用している場合にのみ機能するように見えます)。恐ろしいハック。

34
Mike Tours

AppInitialize()はあなたが探しているメソッドだと思います。これを使用して、WASがホストするWCFサービスでCastle Windsorを初期化する方法についての記事を次に示します。

Castle Windsorおよび非HTTPプロトコルWCFサービス

記事の本質は、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.NET App_Codeフォルダをプロジェクトに追加し、以下で定義するメソッドシグネチャを与えます。この小さな赤ちゃんは、必要なときに正確に起動されます。その後、そこでIoCコンテナを初期化できます。

26
Kev

AppInitializeは、サービスを初期化する有効な方法です。しかし、他にもいくつかの方法があり、この記事で説明されています。 ホストされているWCFサービスを初期化する方法

13
grahamesd