0

私のコードには2つのメソッドがあります。両方の方法、同じDBを接続し、同じSPを実行し、入力文字列に従ってデータを返します

GetData("xxx");

GetData("xyz");

これらのメソッドを1つずつ呼び出すと、正常に機能します。しかし、別々のスレッドを使用してこれらのメソッドを実行しようとすると、

Message: "Login failed. The login is from an untrusted domain and cannot be used with Windows authentication."
Number: 18452

なぜこれがスレッドを介してのみ発生するのですか?どうすれば解決できますか?助けてください。

これが私の接続文字列です

"server=DBServer;database=DataBaseName;Integrated Security=SSPI;Pooling=True"/>"
4

1 に答える 1

0

ほとんどは推測的な推測ですが、スレッド内の適切なコンテキストを正しく偽装していないことを意味している可能性があります。ほとんどの場合、ASP.Netスレッドは呼び出し元になりすましていますが、手動で開始したスレッドはそうではありません。メインスレッドのIDを取得し、それを並行スレッドに渡して、これらのワーカースレッドで偽装する必要があります。この予防策がない場合、ワーカースレッドはアプリプールIDで動作します。

しかし、本当の要点は...あなたは絶対にこれをする必要はありません。複数の呼び出しを並行して行う場合は、に設定AsynchronousProcessingtrueて使用しますBeginExecuteReader。このようにして、なりすましを心配することなく、複数のリクエストを(別々の接続で、まだ!)並行して実行することができます。

于 2013-01-09T08:32:24.647 に答える