SoapHttpClientProtocol线程安全吗?

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

生成的类派生自SoapHttpClientProtocol

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

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

MSDN说SoapHttpClientProtocol是线程安全的:

线程安全

这种类型是线程安全的。

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

线程安全

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


这是Microsoft / MSDN员工说(尽管不保证)它是线程安全的:

嗨Max,

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

SoapHttpClientProtocol类

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

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

此致

史蒂文·郑

Microsoft MSDN在线支持主管

此post按“原样”提供,不提供任何保证,也不授予任何权利。

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

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

MSDN 没有提到它的线程安全:

线程安全

这种类型是线程安全的。

这个class是安全的,没有提到这个对象。

但可以肯定地说,它不是线程安全的 – .NET库中的任何对象都不是线程安全的。

(至少我从未见过一个)