私はASP.NETアプリケーションでサードパーティのWebサービスを使用しています。サードパーティのWebサービスへの呼び出しは同期する必要がありますが、ASP.NETは明らかにマルチスレッドであり、複数のページ要求が行われ、サードパーティWebサービスへの同時呼び出しが行われる可能性があります。 Webサービスへの呼び出しは、カスタムオブジェクトにカプセル化されます。私の考えは、オブジェクトをアプリケーション変数に格納し、C#のlockキーワードを使用して強制的に使用することです。ASP.NETアプリケーション変数をロックする
私はマルチスレッドのコンセプトに慣れていないので、私は神経質です。パブリックオブジェクト(アプリケーション変数が効果的です)をロックしないでください。また、ロックされたコードブロックが失敗した場合(Webサービスが失敗した場合)、アプリケーションドメインを不安定にしてアプリケーションを停止させる可能性があることも読んでいます。
サードパーティのWebサービスは私のWebサイトではめったに使用されておらず、同時に2つの要求が同時に行われることはまれであることに言及しておきます。
ThirdPartWebService objWebService = Application["ThirdPartWebService"] As ThirdPartWebService;
lock (objWebService)
{
objWebService.CallThatNeedsToBeSynchronized();
}
サードパーティのWebサービスには高価なログインメソッドがあるため、実際にはCallThatNeedsToBeSynchronizedメソッドを呼び出すたびにオブジェクトを破棄したくありません。サービスをログインしたままにして、アプリケーション状態で保存したい。 –
Webサービスを再作成する必要がある場合は、usingブロックを削除し、独自の処理を作成します。 –