SoapHttpClientProtocol线程安全吗?

问题描述:

我使用VS 2008(c#)的“添加web引用”功能创建了一个Web服务代理。SoapHttpClientProtocol线程安全吗?

生成的类从SoapHttpClientProtocol

我能否代理的只有一个实例存储在一个单独导出?线程安全吗?在阻止我这样做的呼叫之间是否存在状态?

+0

ASMX是一项传统技术,不应用于新开发。 WCF或ASP.NET Web API应该用于Web服务客户端和服务器的所有新开发。一个暗示:微软已经在MSDN上退役了[ASMX Forum](http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/threads)。 – 2014-01-11 12:18:08

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

+1

该类没有Close方法,至少从v3.0开始没有。见ChrisW的回答。 – 2015-11-22 23:24:49

+0

@RiverSatya - 答案已发布8年前 – 2017-05-02 09:15:48

+0

是的,它已过时。由于这是被接受的答案,我添加了一个指向更新的指针。 – 2017-05-03 00:36:15

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

在根据“线程安全”的底部,则表示此类型是线程安全的。然而,我不知道将它用作单例将是线程安全的。

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

线程安全

此类型是线程安全的。

该类是安全的,没有提及该对象。

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

(至少我从来没有见过)

+1

通常对于非线程安全类型,措辞可能是“所有类成员都保证线程安全,所有实例成员不保证是线程安全的。”所以我会假设“这个类型是线程安全的”意味着类和实例成员。 – Joey 2009-12-17 14:57:22

+0

好吧,我很困惑......也许一个更好的问题将会是:“是否为Web方法的每次调用创建一个Web服务代理的实例,以降低性能? :P – 2009-12-17 15:02:50

+0

我认为它们只是类型(它是类型信息),而不是静态类成员或实例成员,它们不是线程安全的。 – 2009-12-18 00:02:15

MSDN说SoapHttpClientProtocol是线程安全的:

线程安全

此类型是线程安全的。

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

线程安全此类型的

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


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

最大嗨,

对于web服务代理,我觉得应该是线程安全的,的。NET 生成的代理类是从被标记在文档作为线程安全的“SoapHttpClientProtocol” 类派生:

SoapHttpClientProtocol类

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

因此,它应该是安全的多使用它线程上下文只要 ,因为您尚未手动添加 派生代理类中的任何上下文敏感成员。你是这么认为的吗?

真诚,

史蒂芬程

微软MSDN联机支持铅

此公告,提供 “现况”,没有担保,也未赋予任何权利 。

+0

-1:您正在讨论一项遗留技术,并链接到.NET 1.1中的一篇文章。 – 2014-01-11 12:19:34

+2

我给出的第一个链接是针对该类的当前(.NET 4.5)文档:它仍然说它是线程安全的。我给出的最后一个链接是来自MSFT员工的旧论坛帖子的直接引用(以确认应该理解MSDN文档的方式)。 – ChrisW 2014-01-11 12:22:12

+0

这两种说法都不符合我所说的。 – 2014-01-11 12:28:53