null を返した場合、HttpContext プロパティを取得するにはどうすればよいですか?
-
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のようなもの...か何かます。
スレッドプールの実装がここにあります。私はまだそれを使用していないが、私はすることを計画しています。
、[はい、彼らはnullになります。これらのオブジェクトは、スレッドレベルでスコープされています。あなたは新しいスレッドでそれらを使用したい場合は、あなたがそれらを必要とするメソッド/クラスにそれらを渡す必要があります。
通常ASP.Netは、新しいスレッドを生成することはできません...ここで<のhref =「http://csharpfeeds.com/post/5415/Dont_use_the_ThreadPool_in_ASP.NET.aspx」のrel = "nofollowをnoreferrerです「>被写体にを投稿します。
ここで素敵な書き込みが上にあるスレッドMSDNからASP.NET <中/>。