null を返した場合、HttpContext プロパティを取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/529286

  •  22-08-2019
  •  | 
  •  

質問

以下を使用して別のスレッドで非同期作業を行っています。

ThreadPool.QueueUserWorkItem()

そして、この別のスレッドで、私は呼び出す必要があります HttpContext.Current アクセスできるようにするため:

HttpContext.Current.Cache  
HttpContext.Current.Server  
HttpContext.Current.Request  

しかし、 HttpContext.Current この別のスレッドを作成するときは null です。

質問

新しいスレッドを作成するにはどうすればよいですか HttpContext.Current nullではないですか?それとも、キャッシュ、サーバー、およびリクエストのオブジェクトにアクセスできる別の方法はありますか?

役に立ちましたか?

解決

私はのHttpContextのようなASP.NETスタックに依存したオブジェクトへの参照を保持しないようにしようと思います。あなたが別のスレッドでいくつかの作業を行う必要がある場合は、あなたのタスクが終了するまで、ASP.NET 1で待機したくないので、それはです。あなたのスレッドがないときに、多分要求/コンテキスト/セッションは終了します。

あなたはあなたのスレッドに必要なデータを持つオブジェクトを渡す必要があります。

他のヒント

ASP.NET キャッシュには次のようにアクセスできます。 HttpRuntime.Cache HttpContext がない場合でも、残念ながらサーバーまたはリクエストにアクセスできません。

考えてみれば、これは当然のことです。どのページも提供していないため、リクエストはありません。

1 - Web.configファイルに<system.serviceModel>で下のコードを追加します:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 

2 - Webサービスファイル内の名前空間の後に下のコードを追加します:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

3- Webパーツプロジェクトをリビルドします。 完了!

参照する

HttpContext.Serverのためのサービスは、あなたは、HttpServerUtilityクラスを使用することができます。 それは上記と言われているとして、キャッシュのためには、HttpRuntime.Cacheを使用することができます。 リクエスト・オブジェクトの場合、あなたはそれが作成されたスレッドへの要求からのデータを渡すことができます。場合、Request.QueryStringかのRequest.Formのようなもの...か何かます。

それが呼び出し側スレッドのHTTPコンテキストの伝播を提供を

スレッドプールの実装がここにあります。私はまだそれを使用していないが、私はすることを計画しています。

scroll top