我在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