2011-07-27 7 views
0

私はサーバー上でコンパイルされたasp.netプロジェクトを持っています。同じサーバー上で、私はasp.net .dllから参照されるメソッドを実行しているWindowsサービスを持っています。サービスからasp.netライブラリにアクセスする際に、現在のhttpcontextをどのように起動できますか?

httpcontext.currentオブジェクトにアクセスする必要がある場合を除いてすべて正常に動作します。

.currentがnullになる原因は、実行中のサイトの実際のインスタンスを持たない共有ライブラリを参照しているということです。以前のバージョンのサービスでは、コンテキストを使用しないでasp.netで回避策を見つけることができましたが、サイトのアーキテクチャの多くが変更されたため、これが最後の手段になりました。

サイトのインスタンスを作成し、サービスの目的で現在のhttpcontextをシミュレートする方法はありますか?

+1

httpコンテキストにないため、HttpContextはありません。進行中のリクエストとレスポンスはなく、Windowsサービスに関する限りウェブサイトを持っていないことさえあります。どのようにそれが動作すると思いますか? – driis

答えて

1

ASP.NETフレームワークは、HTTPコンテキストをインスタンス化して管理し、ASP.NET外では常にnullになります。それを作成する方法を理解するためにフレームワークを掘り下げる必要がありますが、正直なところ、それは価値がありません...

しかし、HTTpcontextbaseを指すようにHttpContext参照を再設定できますか?そうした場合、HttpContextBaseは基本クラスであり、誰でも継承できます。非常に簡単に、あなたはあなたが望むものを達成するためにカスタムを作成することができます。 HttpContext.Currentをラップするために独自の静的メソッドを作成し、この静的メソッドをアプリケーションで参照し、サービス内の静的メソッドを参照することもできます(ただし、サービスは最初にインスタンス化します)。

HTH。

+0

あなたのご意見ありがとうございます。 asp.netプロジェクトにWebサービスを追加し、そのようにデータを取得しようとしています。それはあなたがお勧めするものですか? – Javier

+0

HttpContext.CurrentはWebリクエストで利用できるので、動作するはずです。私の解決策は、あなたが他の選択肢がなく、オフラインで何かをする必要がある場合でした。 @PatrickerのようにWebサービスを使用することが推奨されます。 –

+0

わかりました。私はwebserviceを追加してしまいました。ありがとう。 – Javier

0

Windowsサービスではありません。私はこれを行う適切な方法はasp.netのために必要なものを処理し、あなたのWindowsサービスからそのwebserviceを呼び出すwebserviceを作成することだと思う。

また、httpcontext.currentに依存しているコードの一部を投稿すると、代替案を見つけることができます(実際にはリクエスト/応答アクションに頼らないと仮定して)。

関連する問題