2012-01-12 16 views
14

私はURLのホスト名を取得することができます。HttpContext.Currentを使用せずにURLホスト名を特定しますか?現在の要求を使用して

HttpContext.Current.Request.Url.Host 

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

私はHttpRuntimeから手に入れたいと思っていましたが、そこには何も使われていないようです。この情報を得る方法はありますか?

+0

一つのいずれかに対応指定されたホスト名。入ってくるリクエストを調べなければ、私たちに連絡するのに使われたホスト名を確かめるのは難しいでしょう。 – spender

+0

あなたは何をしようとしていますか、正確にあなたのコードはいつ実行されていますか?それはSqlDependencyのOnChangeイベント、App CacheのonRemoveCallbackまたは他の場所にありますか? – Journey

+0

明快に質問を編集しました –

答えて

3

あなたは、イベントハンドラを設定している現時点ではホストを知っているなら、あなたのような何かを行うことができるはず(コードは実際にテストされていません):当社のウェブサイトの

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

おかげで、私はこれもやってきました。だから、私のコードをApplication_OnStartからSession_OnStartのようなものに移動することができると仮定すると、あなたが提案したようにホストに渡すことができます。 –

4

どの程度

Environment.MachineName 
+0

申し訳ありませんが、これは動作しません、別のホストバインディング(site1.xxx.com、site2.xxx.comなど)を使用して、同じボックスに複数のインスタンスがあります –

+0

HttpContextが見つからない場合(あなたの言ったように)あなたのコードが実行されるコンテキストを決定します。 –

1

あなたが探しているウェブサイトから情報を照会するためにIIS APIを使用する必要があります。 IISの設定によっては、URLまたはホスト名が異なる可能性があります。 (hostheaders、ポート、プロトコル、およびこのようなものを考えてみて。

Webアプリケーションからこれを実行している、そしてそれはすべてのHttpContext必須、コードを管理している場合、IIS APIの導入がhttp://learn.iis.net/page.aspx/165/how-to-use-microsoftwebadministration/

+0

これは唯一の方法だと思われますが、IISに問い合わせるための追加のアクセス権が必要です。この問題を回避できるかどうかを確認する必要があるかもしれません。 –

6

で見つけることができあなたの子ライブラリ(あなたのマネージコードがライブラリにあると仮定します)はSystem.Webへの参照を持っていますか?そうでなければ、このリファレンスを追加することを検討してください。 :

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

いずれの場合でも、あなたのコードが管理されていないか、テキストは本当にWebアプリケーションでは生成されませんが、HttpContextはスレッドが生存している間はあらゆる時点で利用できるはずです。

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

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

+1

HttpContextは存在しますが、現在のリクエストであるHttpContext.Currentは、Webアプリケーションのコードがリクエストによってトリガされないため、SQL Dependencyコールバックによってトリガされないため、nullです。 –

+0

ページフィールドを 'HttpContext.Current'(例えば_currentContext)に設定し、コールバックでそれにアクセスできますか? – jrummell

+0

@MattRoberts:編集を掲示しました。 –

関連する問題