SoapHttpClientProtocol线程安全吗?

时间:2009-12-17 14:40:14

标签: c# web-services proxy thread-safety asmx

我使用VS 2008(c#)的“添加Web引用”功能创建了一个Web服务代理。

生成的类派生自SoapHttpClientProtocol

我可以只将一个代理实例存储在一个单例中吗?它是线程安全的吗?呼叫之间是否存在阻止我这样做的状态?

4 个答案:

答案 0 :(得分:10)

MSDN说SoapHttpClientProtocol是线程安全的:

  

线程安全

     

此类型是线程安全的。

对于像System.Windows.Forms这样不是线程安全的另一个类,MSDN说,

  

线程安全

     

此类型的任何公共静态(在Visual Basic中为Shared)成员都是   线程安全。任何实例成员都不能保证是线程   安全


Here is a Microsoft/MSDN employee说(虽然没有保证)它是线程安全的:

  

Hi Max,

     

对于webservice代理,我认为它应该是.NET的线程安全   生成的代理类派生自“SoapHttpClientProtocol”   在文档中标记为线程安全的类:

     

SoapHttpClientProtocol Class

     

http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soaphttpclientprotocol(VS.71).aspx

     

因此,在多线程上下文中使用它应该是安全的   因为您没有手动添加任何上下文相关的成员   派生代理类。你这么认为吗?

     

此致

     

Steven Cheng

     

Microsoft MSDN在线支持主管

     

此帖子按“原样”提供,不提供任何保证,并且不提供保证   权利。

答案 1 :(得分:2)

没有。它不是线程安全的。客户端必须处于“打开”状态才能启用呼叫。一个简单的场景,其中一个线程执行client.Close()而另一个线程尝试调用方法将失败。

答案 2 :(得分:1)

根据此链接:http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soaphttpclientprotocol.aspx

在“线程安全”下的底部,它说这种类型是线程安全的。但我不知道将它用作Singleton将是线程安全的。

答案 3 :(得分:1)

MSDN makes no mention,它是线程安全的:

  

线程安全

     

此类型是线程安全的。

班级安全,没有提及对象。

但是可以肯定地说它是线程安全 - .NET库中没有对象是线程安全的。

(至少我从未见过一个)

相关问题