我用VS2008 (c#)的“添加Web引用”特性创建了一个web服务代理。
生成的类派生自SoapHttpClientProtocol
我只能在单例中存储代理的一个实例吗?它是线程安全的吗?两次调用之间是否存在阻止我执行此操作的状态?
发布于 2009-12-19 00:35:43
不是的。它不是线程安全的。客户端必须处于打开状态才能启用调用。在一个简单的场景中,一个线程执行client.Close(),而另一个线程试图调用一个方法,这将会失败。
发布于 2014-01-10 05:15:58
MSDN说SoapHttpClientProtocol是线程安全的:
线程安全
此类型是线程安全的。
对于另一个类,比如System.Windows.Forms,它不是线程安全的,
线程安全
此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的。不能保证任何实例成员都是线程安全的。
Here is a Microsoft/MSDN employee声明(尽管没有保证)它是线程安全的:
Hi Max
对于webservice代理,我认为它应该是线程安全的,因为.NET生成的代理类是从文档中标记为线程安全的"SoapHttpClientProtocol“类派生的:
SoapHttpClientProtocol类
http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soaphttpclientprotocol(VS.71).aspx
因此,只要您没有在派生的代理类中手动添加任何上下文相关的成员,那么在多线程上下文中使用它应该是安全的。你认为这样对吗?
由衷地,
Steven Cheng
Microsoft MSDN在线支持线索
这篇文章是按“原样”提供的,不提供任何担保,也不授予任何权利。
发布于 2009-12-17 22:44:43
根据此链接:http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soaphttpclientprotocol.aspx
在“线程安全”的底部,它说这个类型是线程安全的。然而,我不知道使用它作为单例是否会是线程安全的。
https://stackoverflow.com/questions/1922214
复制相似问题