我在ASP.NET應用程序中使用第三方Web服務。對第三方Web服務的調用必須進行同步,但ASP.NET顯然是多線程的,並且可能會產生多個頁面請求,導致同時調用第三方Web服務。調用Web服務被封裝在一個自定義對象中。我的想法是將對象存儲在應用程序變量中,並使用C#鎖關鍵字強制同步使用它。鎖定ASP.NET應用程序變量
我很緊張,因爲我是新來的多線程概念,我讀過你不應該鎖定一個公共對象(我的應用程序變量有效)。我還讀到,如果鎖定的代碼塊失敗(如果Web服務失敗,可能會出現這種情況),那麼它可能會破壞應用程序域並導致應用程序崩潰。
我應該提到,我的網站很少使用第三方Web服務,並且很少有2個請求是在同一時間完成的。
下面是我如何使Web服務調用一個粗略的代碼示例:
ThirdPartWebService objWebService = Application["ThirdPartWebService"] As ThirdPartWebService;
lock (objWebService)
{
objWebService.CallThatNeedsToBeSynchronized();
}
第三方Web服務具有昂貴的登錄方法,所以實際上我不想在每次調用CallThatNeedsToBeSynchronized方法時處理該對象。我想讓服務登錄並將其存儲在應用程序狀態中。 – 2010-12-10 20:52:07
然後刪除使用塊並創建您自己的處理,如果您需要重新創建Web服務。 – 2010-12-10 20:57:30