2

最初にシナリオを説明しましょう。

単一のインストールベースからサービスの複数のコピー(Say 10)をインストールしました。ここで、dllの1つを更新したいと思います。すべてのサービスを停止し、dllを更新して、サービスを再起動する必要があります。

この状況を回避するために、コードでShadowCopyingを使用しました。すべてのサービスを停止せずにdllを更新できるようにします。以下のとおりです。

static void Main(string[] args)
{
    AppDomain.CurrentDomain.SetCachePath(@"C:\Cache");
    AppDomain.CurrentDomain.SetShadowCopyPath(AppDomain.CurrentDomain.BaseDirectory);
    AppDomain.CurrentDomain.SetShadowCopyFiles();

    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[] 
        { 
            new SampleService(serviceName) 
        };
    ServiceBase.Run(ServicesToRun);
}

今、私はAsp.Netから次のようにapp.configファイルを介して同じことを達成しようとしています

<hostingEnvironment 
    idleTimeout="Infinite" 
    shutdownTimeout="30" 
    shadowCopyBinAssemblies="true" />

助言がありますか?

4

1 に答える 1

2

ASP.Netホスティング環境には、アプリケーションのリサイクルを管理するためのサポートが組み込まれています。

Windows .Netサービスは、このサポートがない標準のCLRホストを使用します。あなたはあなた自身の例を実装する必要があります

  1. AppDomainサービスコードをホストする子を作成し、シャドウコピーを構成します。
  2. のようなものを使用してFileSystemWatcher、元のbinディレクトリを監視します。
  3. ファイルが変更されたら、ファイルを破棄してAppDomain新しいファイルを作成し、リロードします。

ASP.Netホストは、これらの方針に沿って何かを実行します(ただし、既存の要求を管理したり、進行中に新しい要求をキューに入れたりする機能もあります)。

于 2011-09-30T10:33:21.133 に答える