IIS7 でホストされている WCF サービスがあります。このサービスには、文字列 (一種のログ) を含む静的リストを持つ静的クラスがあります。定期的にエントリをファイルまたはデータベースに書き込みます。
ただし、IIS が何らかの理由でアプリのリサイクルまたは終了を決定すると、静的フィールドのエントリは失われます。
サービスのシャットダウンの種類のイベントを処理し、メモリからデータを永続化する方法はありますか?
ありがとう
シュリードダー
IIS7 でホストされている WCF サービスがあります。このサービスには、文字列 (一種のログ) を含む静的リストを持つ静的クラスがあります。定期的にエントリをファイルまたはデータベースに書き込みます。
ただし、IIS が何らかの理由でアプリのリサイクルまたは終了を決定すると、静的フィールドのエントリは失われます。
サービスのシャットダウンの種類のイベントを処理し、メモリからデータを永続化する方法はありますか?
ありがとう
シュリードダー
カスタムサービスホストを使用して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日までさかのぼります)。これを達成する方法は他にもある可能性が高いですが、少なくともこれはあなたに何らかの方向性を与えるはずです。