2009-05-19 10 views
1

私ははるかに大きなシステムの一部であるASP.NETアプリケーションを持っています。 Webアプリケーションのルートレベルの上にあるファイルからほとんどの設定を読み込みます。ファイルが変更されたときにASP.NETを再起動する方法を教えてください。

アプリケーションが既に書かれていると、設定ファイルのフォーマットは、顧客が編集を容易にするために選ばれたので、私は“Shared configuration files in .NET”.

に溶液を使用することはできません私は、ASP.NETは、私が呼び出すことができるAPIを持って期待していますどのファイルを見るかを起動するための起動時間。 (ASP.NETが既にファイルを見て、彼らが変更された場合に再起動するためのコードを持っているように私は、しかし、それは残念だろう、これに「FileSystemWatcher」を使用して自分自身を再起動をして、その後のイベントをキャッチし、ハードな方法を記述することができます。)

また、ASP.NETを良い方法で再起動するために呼び出すASP.NET APIについて教えてください。 1の場合 Using the FileSystemWatcher from ASP.NETExtending FileSystemWatcher to ASP.NET


私はASP.NETキャッシュ内の構成をキャッシュされたファイルにされたCacheDependencyを設定します。

これらは私が助けるかもしれないことを発見したいくつかのリンクです。高速アクセスが必要な別のケースでは、FileSystemWatcherを使用し、構成が変更されたときに静的フィールドを更新しました。

(私は合理的な方法で、コードからASP.NETを再起動する方法を見つけることはなかった。)

答えて

4
static FileSystemWatcher ConfigWatcher; 

    static void StartWatchConfig() { 

    ConfigWatcher = new FileSystemWatcher("configPath") { 
     Filter = "configFile" 
    }; 

    ConfigWatcher.Changed += new FileSystemEventHandler(ConfigWatcher_Changed); 
    ConfigWatcher.EnableRaisingEvents = true; 
    } 

    static void ConfigWatcher_Changed(object sender, FileSystemEventArgs e) { 
    HttpRuntime.UnloadAppDomain(); 
    } 
+1

HttpRuntime.UnloadAppDomain()メソッドは、私が紛失したものです。 –

-1

私はあなたがコンフィギュレーションファイルへの変更を監視するFileSystemWatcherを使用してサービスを作成する必要があるとしていると思います変更が検出されたら、Webアプリケーションのweb.configファイルに重要でない変更を加えて保存して、アプリケーションを再起動します。

+0

私は –

4

アプリがのHttpContextの外の設定にアクセスすることはありません知っている場合は、お使いのコンフィギュレーションをキャッシュして、ファイルにCacheDependencyを追加することを検討してください。ファイルが変更されると、キャッシュされた設定が削除され、更新された値で再追加できます。

ような何か:

public MyConfigObj GetConfig() 
{ 
    var config = Cache["configkey"] as MyConfigObj; 
    if(config == null) 
    { 
     var configPath = Server.MapPath("myconfigpath"); 
     config = GetConfigFromFile(configPath); 
     Cache.Insert("configkey", config, new CacheDependency(configPath)); 
    } 
    return config; 
} 
+0

おかげで、この答えは多くの人々に有用であろう、より良い方法がある願っています。変更された設定を使用するには、再起動が必要です。私が再び始めたのであれば、これは考慮すべき興味深い選択肢になるでしょう –

+0

私は根本的な問題を解決するのに最も近いので、この答えは例外です。私は私の設定ファイルの一つをキャッシュしました。それ以外の場合は、FileSystemWatcherを使用し、ファイルが変更されたときに静的フィールドを更新しました。 –

-1

愚かな答えかもしれないが、あなたは常に「タッチ」(いくつかの空白や何かを追加)web.configファイルことができ、かつ、再起動をトリガーします。それは第二部について

+0

問題は、人々がこれを忘れると多くのバグレポートを取得することです! –

+0

次に、TeamCityやCruiseControl.netなどの自動化されたデプロイメントソリューションを見て、展開を自動化するだけでなく、web.configファイルに「触れる」ように設定することもできます。 –

+0

私たちの顧客は、独自のネットワーク内で独自のサーバーなどでアプリケーションを実行します。 (UIの一部にHTMLを使用する*アプリケーション*の販売です) –

1

(私はこれは何のウェブサイトの一般的な再起動やリセットIISに理想的なソリューションであることを改めて強調しないようにしたい))=

貧乏人のiisresetとで、あなたは次の作品を使用することができますAppPoolリサイクルを起動するコード(IISを再起動するのと同じですが、サーバー全体ではなくアプリケーションレベルでのみ)

using System.DirectoryServices; 

public void RecycleAppPool(string machine, string appPoolName) 
{ 
    string path = "IIS://" + machine + "/W3SVC/AppPools/" + appPoolName; 
    DirectoryEntry w3svc = new DirectoryEntry(path); 
    w3svc.Invoke("Recycle", null); 
} 

hereから)

関連する問題