36

可能かどうかはわかりませんが、WCFサービスが開始されたらすぐに関数を実行して初期キャッシュデータを生成したいと思います。キャッシュの実装方法については今は心配していません。私の質問は、サービスの開始時に関数を実行することについて厳密に説明しています。サービスはRESTfulになります。

このサービスは最終的にIISでホストされ、.NetFramework4.5を使用します。

4

3 に答える 3

36

最も簡単な方法はApp_Code、WCFプロジェクトルートの下にフォルダーを作成し、次のようにクラスを作成することです(これを呼び出しますInitializerが、重要ではありません。重要な部分はメソッド名です)。

public class Initializer
{
    public static void AppInitialize()
    {
        // This will get called on startup
    } 
}

詳細についてAppInitializeは、こちらをご覧ください

于 2012-05-31T21:40:23.377 に答える
33

@KirkWollが提案したものは機能しますが、IISにいて、それがApp_Codeの下の唯一のAppInitialize静的メソッドである場合に限ります。サービスごとに初期化を行う場合、別の AppInitialize メソッドがある場合、または IIS を使用していない場合は、次の他のオプションがあります。

  • .NET Framework 4.5 を使用し、IIS を使用している場合: サービスの実行時に呼び出されるサービス構成メソッドを使用できます。詳細については、http://msdn.microsoft.com/en-us/library/hh205277 (v=vs.110).aspx を参照してください。
  • サービスを自己ホストしている場合は、サービスの開始時期を制御します ( への呼び出しでServiceHost.Open()、そこで初期化できます)。
  • 4.5 ではなく IIS を使用している場合は、サービス ホスト ファクトリと、サービス ホストが開かれているときに呼び出されるカスタム サービス ホストを使用できます。その時点で、初期化を行うことができます。サービス ホスト ファクトリの詳細については、http://blogs.msdn.com/b/carlosfigueira/archive/2011/06/14/wcf-extensibility-servicehostfactory.aspxを参照してください。

カスタム ファクトリの例を以下に示します。

public class MyFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        ServiceHost host = base.CreateServiceHost(serviceType, baseAddresses);
        host.Opening += new EventHandler(host_Opening);
        return host;
    }

    void host_Opening(object sender, EventArgs e)
    {
        // do initialization here
    }
}

}

于 2012-05-31T21:55:47.403 に答える