ログイン中にThread.CurrentPrincipalオブジェクトを設定するWebサービスを使用していますが、すぐに同じWebサービスの別のWebメソッドがその異なる/リセットであるThread.CurrentPrincipalにアクセスします。
これが予想されるかどうか、または同じクライアントからの異なるWebメソッド呼び出しが同じThread.CurrentPrincipalオブジェクトにアクセスできるかどうかを誰かに教えてもらえますか?
ありがとう
ログイン中にThread.CurrentPrincipalオブジェクトを設定するWebサービスを使用していますが、すぐに同じWebサービスの別のWebメソッドがその異なる/リセットであるThread.CurrentPrincipalにアクセスします。
これが予想されるかどうか、または同じクライアントからの異なるWebメソッド呼び出しが同じThread.CurrentPrincipalオブジェクトにアクセスできるかどうかを誰かに教えてもらえますか?
ありがとう
スレッドの使用を停止するとすぐに、スレッドプールに戻ります。
次の呼び出しはスレッドプールからスレッドを取得しますが、どちらを取得するかを制御することはできません。
リクエストごとに、どのユーザーが電話をかけているのかに関する情報を送信する必要があります。
Web サイトに組み込みの ASP .NET 認証を使用していて、Web ページから Web サービスを呼び出すだけの場合は、装飾を使用して Web サービスのメソッドでセッション変数とユーザー コンテキスト情報を有効にできる場合があります。このような:
[WebMethod(EnableSession=true)]
public void MyWebMethod()
{
string mySessionVar = HttpContext.Current.Session["sessionVar"].ToString();
IPrincipal currentUser = HttpContext.Current.User;
...
}
それでも問題が解決しない場合は、Thread.CurrentPrincipal オブジェクトを何に使用しているか (Thread.CurrentPrincipal オブジェクトから何を引き出しているか) を教えてください。おそらく別の解決策があります。
これは予期されることであり、すべての新しい Web リクエストは実際には新しいスレッドです。そして、すべての Web リクエストは、CurrentThread、CurrentCulture などをリセットします。
あなたがしようとしているのは、認証セッションです。多くの可能な解決策があります。しかし、何かを提案するには、あなたが使用しているテクノロジーを特定する必要があります。
たとえば、ASP.NET ASMX サービスはフォーム認証を使用できます。また、ASP.NET セッションについても認識しています。
WCF を使用すると、ASP.NET サポートを有効にできるため、ASP.NET ASMX サービスと同じものを使用できます。ただし、 Windows Communication Foundation Authentication Serviceを利用することもできます。
とにかくあなたからのより多くの情報が必要です。