2009-12-17 97 views
8

我使用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

回答

2

不是線程安全的。客戶端必須處於打開狀態以啓用呼叫。一個線程執行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

1

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

10

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