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库中的任何对象都不是线程安全的。
(至少我从未见过一个)