web-dev-qa-db-ja.com

HttpContext.Currentを使用せずにURLホスト名を決定しますか?

現在のリクエストを使用して、次のURLホスト名を取得できます。

HttpContext.Current.Request.Url.Host

しかし-現在のリクエストを使用せずにURLホスト名を決定する必要があります(HttpContext.Current)。これは、SQL依存関係が見つかったときに、onChangeコールバックのSqlDependencyからコードが呼び出されるためです。コードは私のWebアプリにありますが、リクエストはありません。HttpContext.Current 無効です。

HttpRuntimeから入手できると思っていたのですが、何の役にも立たないようです。この情報を入手する方法はありますか?

15
Matt Roberts

イベントハンドラーを設定している時点でホストがわかっている場合は、次のようなことができるはずです(コードは実際にはテストされていません)。

string Host = HttpContext.Current.Request.Url.Host;
var dep = new SqlDependency(cmd);
dep.OnChange += ((sender, args) =>
{
    DoStuff(Host);
});
3
Journey

これをWebアプリケーションから実行していて、それがすべてマネージコードである場合は、HttpContextが存在している必要があります。子ライブラリ(マネージコードがライブラリ内にあると想定)にSystem.Webへの参照がありますか?そうでない場合は、この参照を追加することを検討してください。その時点から、完全修飾名前空間を使用してHttpContextに直接アクセスできるようになります。

System.Web.HttpContext.Current.Request.Url.Host

いずれにせよ、コードが管理されていないか、コンテキストが本当にWebアプリケーションから発信されていない場合を除いて、スレッドが動作している間はいつでもHttpContextを使用できます。

編集:
以下のコメントを読むと、SqlDependencyが個別に起動されているようです。同じスレッド上にありますが、リクエストによって直接起動されることはありません。探しているのはホストURLだけなので、依存関係に必要な場合にこの情報を保持するアプリケーション変数または静的変数を作成できることは考えられません。

また、私が見たのは、HttpContext.Current利用できない場合があります、HttpContext.Requestかもしれません。これらは同じオブジェクトである必要がありますが、必ずしもそうであるとは限りません。ホストがそこにある可能性があります。

6
Joel Etherton

どうですか

Environment.MachineName
4
Wiktor Zychla

IIS apiを使用して、探しているWebサイトから情報を照会する必要があります。IIS構成によっては、URLまたはホスト名が異なる可能性があるためです。 。(ホストヘッダー、ポート、プロトコル、およびこのようなものについて考えてください。

IIS APIの概要は http://learn.iis.net/page.aspx/165/how-to-use-microsoftwebadministration/ にあります。

2
Thorsten Hans