我使用VS 2008(c#)的「添加web引用」功能創建了一個Web服務代理。SoapHttpClientProtocol線程安全嗎?
生成的類從SoapHttpClientProtocol
我能否代理的只有一個實例存儲在一個單獨導出?線程安全嗎?在阻止我這樣做的呼叫之間是否存在狀態?
我使用VS 2008(c#)的「添加web引用」功能創建了一個Web服務代理。SoapHttpClientProtocol線程安全嗎?
生成的類從SoapHttpClientProtocol
我能否代理的只有一個實例存儲在一個單獨導出?線程安全嗎?在阻止我這樣做的呼叫之間是否存在狀態?
不是線程安全的。客戶端必須處於打開狀態以啓用呼叫。一個線程執行client.Close()而另一個線程嘗試調用方法的簡單場景將失敗。
該類沒有Close方法,至少從v3.0開始沒有。見ChrisW的回答。 – 2015-11-22 23:24:49
@RiverSatya - 答案已發佈8年前 – 2017-05-02 09:15:48
是的,它已過時。由於這是被接受的答案,我添加了一個指向更新的指針。 – 2017-05-03 00:36:15
每此鏈接:http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soaphttpclientprotocol.aspx
在根據「線程安全」的底部,則表示此類型是線程安全的。然而,我不知道將它用作單例將是線程安全的。
MSDN makes no mention,它是線程安全的:
線程安全
此類型是線程安全的。
該類是安全的,沒有提及該對象。
但是可以肯定地說它不是而不是線程安全 - .NET庫中沒有對象是線程安全的。
(至少我從來沒有見過)
通常對於非線程安全類型,措辭可能是「所有類成員都保證線程安全,所有實例成員不保證是線程安全的。」所以我會假設「這個類型是線程安全的」意味着類和實例成員。 – Joey 2009-12-17 14:57:22
好吧,我很困惑......也許一個更好的問題將會是:「是否爲Web方法的每次調用創建一個Web服務代理的實例,以降低性能? :P – 2009-12-17 15:02:50
我認爲它們只是類型(它是類型信息),而不是靜態類成員或實例成員,它們不是線程安全的。 – 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類
因此,它應該是安全的多使用它線程上下文只要 ,因爲您尚未手動添加 派生代理類中的任何上下文敏感成員。你是這麼認爲的嗎?
真誠,
史蒂芬程
微軟MSDN聯機支持鉛
此公告,提供 「現況」,沒有擔保,也未賦予任何權利 。
-1:您正在討論一項遺留技術,並鏈接到.NET 1.1中的一篇文章。 – 2014-01-11 12:19:34
我給出的第一個鏈接是針對該類的當前(.NET 4.5)文檔:它仍然說它是線程安全的。我給出的最後一個鏈接是來自MSFT員工的舊論壇帖子的直接引用(以確認應該理解MSDN文檔的方式)。 – ChrisW 2014-01-11 12:22:12
這兩種說法都不符合我所說的。 – 2014-01-11 12:28:53
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