3

IIS7 でホストされている WCF サービスがあります。このサービスには、文字列 (一種のログ) を含む静的リストを持つ静的クラスがあります。定期的にエントリをファイルまたはデータベースに書き込みます。

ただし、IIS が何らかの理由でアプリのリサイクルまたは終了を決定すると、静的フィールドのエントリは失われます。

サービスのシャットダウンの種類のイベントを処理し、メモリからデータを永続化する方法はありますか?

ありがとう

シュリードダー

4

1 に答える 1

4

カスタムサービスホストを使用してIIS経由でいくつかのサービスを実装しました(元々は、グローバルエラー処理のためにIErrorHandlerを実装できるようにこれを実行しました)。

ServiceHostの実装とServiceHostFactory、カスタムサービスホストを呼び出すの実装の2つが必要になります。例(表示されているコードの関連部分のみ):

public class MyCustomServiceHost : ServiceHost
{

    protected override void OnClosing()
    {

        // logic to save off your static data
        base.OnClosing();
    }
}

public class MyCustomServiceHostFactory : ServiceHostFactory
{

    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {

        return new MyCustomServiceHost(serviceType, baseAddresses);
    }
}

.svcファイルには、次のようなものがあります。

<%@ ServiceHost Service="MyCompany.MyServiceName" Factory="MyCompany.MyCustomServiceHostFactory" %>
<%@ Assembly Name="MyCustomServiceHost" %>

これはこれを行う1つの方法です(これは.NET 3。5日までさかのぼります)。これを達成する方法は他にもある可能性が高いですが、少なくともこれはあなたに何らかの方向性を与えるはずです。

于 2012-08-04T00:41:08.283 に答える