2011-08-06 12 views
0

ASPを使用する場合、現在のhttpコンテキストで取得するために、コードのどこからでもHttpContext.Currentを参照できます。HttpListenerを使用しているときに現在のhttpコンテキストを参照するには?

HttpListenerを使用して同様のことをしたいので、コード内のどこからでもGET/POSTデータなどにアクセスできます。このためにグローバルオブジェクトを参照することはできますか、現在のHttpListenerContextオブジェクトをすべて自分のコードで明示的に渡す必要がありますか?

' This is what I want to access 
Dim Context As HttpListenerContext = Listener.EndGetContext(StateObject) 

答えて

0

[OK]をのでノー刺され、私はそれを自分で解決しました。

1)httplistenerリクエストコンテキストをスレッドストレージに保存しますが、より簡単な方法です。

2)ThreadStatic変数にhttplistenerリクエストコンテキストを格納します。

Public Class CurrentRequest 

    <ThreadStatic()> Public Shared QueryString As String 
    <ThreadStatic()> Public Shared PostStream As Stream 

End Class 
+0

これは正しくありません。 'PerThread'は、ThreadPoolに基づいたWebアプリケーションでの正確性を保証することはできません。また、HttpはThreadPoolを使用します。これを見てくださいhttp://stackoverflow.com/questions/6845898/castle-windsor-perthread-vs-perwebrequest-in-asp-net – mayu

1

より良いマルチスレッドを可能にするために、コンテキストオブジェクトを引数として渡す必要があります。統計は、破損(Tymekが指摘する適切なコンテキストを持たない場合、または同期によって適切に保護されていない場合)、または並行性の問題につながります。コンテキストオブジェクトを渡すことで、必要なだけ多くの要求を並列に実行できます。

関連する問題