現在のリクエストを使用して、次のURLホスト名を取得できます。
HttpContext.Current.Request.Url.Host
しかし-現在のリクエストを使用せずにURLホスト名を決定する必要があります(HttpContext.Current
)。これは、SQL依存関係が見つかったときに、onChangeコールバックのSqlDependency
からコードが呼び出されるためです。コードは私のWebアプリにありますが、リクエストはありません。HttpContext.Current
無効です。
HttpRuntime
から入手できると思っていたのですが、何の役にも立たないようです。この情報を入手する方法はありますか?
イベントハンドラーを設定している時点でホストがわかっている場合は、次のようなことができるはずです(コードは実際にはテストされていません)。
string Host = HttpContext.Current.Request.Url.Host;
var dep = new SqlDependency(cmd);
dep.OnChange += ((sender, args) =>
{
DoStuff(Host);
});
これをWebアプリケーションから実行していて、それがすべてマネージコードである場合は、HttpContextが存在している必要があります。子ライブラリ(マネージコードがライブラリ内にあると想定)にSystem.Webへの参照がありますか?そうでない場合は、この参照を追加することを検討してください。その時点から、完全修飾名前空間を使用してHttpContextに直接アクセスできるようになります。
System.Web.HttpContext.Current.Request.Url.Host
いずれにせよ、コードが管理されていないか、コンテキストが本当にWebアプリケーションから発信されていない場合を除いて、スレッドが動作している間はいつでもHttpContextを使用できます。
編集:
以下のコメントを読むと、SqlDependencyが個別に起動されているようです。同じスレッド上にありますが、リクエストによって直接起動されることはありません。探しているのはホストURLだけなので、依存関係に必要な場合にこの情報を保持するアプリケーション変数または静的変数を作成できることは考えられません。
また、私が見たのは、HttpContext.Current
利用できない場合があります、HttpContext.Request
かもしれません。これらは同じオブジェクトである必要がありますが、必ずしもそうであるとは限りません。ホストがそこにある可能性があります。
どうですか
Environment.MachineName
IIS apiを使用して、探しているWebサイトから情報を照会する必要があります。IIS構成によっては、URLまたはホスト名が異なる可能性があるためです。 。(ホストヘッダー、ポート、プロトコル、およびこのようなものについて考えてください。
IIS APIの概要は http://learn.iis.net/page.aspx/165/how-to-use-microsoftwebadministration/ にあります。