SoapHttpClientProtocol线程安全吗?

Mik*_*ier 9 c# proxy web-services asmx thread-safety

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

生成的类派生自 SoapHttpClientProtocol

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

Chr*_*isW 10

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

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

此致

史蒂文·郑

Microsoft MSDN在线支持主管

此帖子按"原样"提供,不提供任何保证,也不授予任何权利.

  • 我给出的第一个链接是该类的当前(.NET 4.5)文档:它仍然说它是线程安全的.我给出的最后一个链接是来自MSFT员工的旧论坛帖子的直接引用(以确认应该理解MSDN文档的方式). (3认同)
  • 是的,我真的不知道.我猜措辞可以采用面值:这种类型是线程安全的 - 包括类和实例对象.通过反射器中的代码,我找不到任何会成为竞争条件的东西.我不知道约翰的脾气暴躁.问题是SoapHttpClientProtocol是否是线程安全的; 如果认为人们应该使用它. (2认同)

Adr*_*scu 1

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