1


0

私はログイン時にThread.CurrentPrincipalオブジェクトを設定するWebサービスを使用しています。同じWebサービスの別のWebメソッドがThread.CurrentPrincipalにアクセスするとすぐに、その異なる/リセットされます。

これが予想されるのか、同じクライアントからの異なるwebmethod呼び出しが同じThread.CurrentPrincipalオブジェクトにアクセスできるのかを誰かに教えてもらえますか

ありがとう

3 Answer


1


スレッドの使用を中止するとすぐに、スレッドプールに戻ります。

次の呼び出しはスレッドプールからスレッドを取得しますが、どのスレッドを取得するかは制御できません。

リクエストごとに、どのユーザーが電話をかけているかに関する情報を送信する必要があります。


0


これは予想されていることで、新しいWeb要求はすべて新しいスレッドです。 そしてすべてのWebリクエストはCurrentThread、CurrentCultureなどのようなものをリセットします。

あなたがやろうとしているのは認証セッションです。 解決策はたくさんあります。 しかし、私があなたが使用する技術を指定しなければならない何かを提案するために。

たとえば、ASP.NET ASMXサービスはフォーム認証を使用できます。 また、彼らはASP.NETセッションについて知っています。

WCFを使用すると、ASP.NETサポートを有効にすることができるので、ASP.NET ASMXサービスの場合と同じ機能があります。 しかし、あなたは Windows Communication Foundation認証サービスを利用することもできます。

とにかくあなたからより多くの情報が必要です。


0


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オブジェクトから何を引き出すのか)を教えてください。 おそらく別の解決策があります。