簡體   English   中英

.NET WSE客戶端存根是否是線程安全的?

[英]Are .NET WSE client stubs thread-safe?

客戶端存根是否由.NET WSE線程安全的WSDL生成?

當然,“線程安全”不是一個嚴格定義的術語,所以我至少對以下內容感興趣:

不同線程可以同時訪問同一存根類的不同實例,具有與單線程執行相同的有效行為嗎?

同一個存根類的單個實例是否可以由不同的線程並發訪問,並且在單線程執行中以相同的方式交錯相同的有效行為?

您可能還希望使用此處描述的術語(並在此處起源)來更精確地討論這一術語。

好吧,對於簡短的回答是線程安全,是的。 原因是服務的服務器端將有更多關於線程功能的客戶端連接。 客戶端只是一個代理,以服務器可以理解的方式布局請求。 它什么都不知道。 它是一個基本類,除了與服務器的連接之外沒有外部訪問。 因此,只要服務器允許多個連接,您就可以了。 因此沒有資源爭用(除了服務器能夠處理您的所有請求)。

在客戶端,您可以讓多個線程使用相同的類但不同的實例。 這可能是首選方案,因此每個事務都可以是原子事務。 對於共享實例,您必須處理自己的線程鎖定類本身的訪問,否則您可能會遇到代碼內部資源的競爭條件。

還可以進行異步調用。 wsdl工具生成的存根將創建開始,結束調用方法,以便您可以提供回調方法,以有效地允許您提交請求並繼續您的代碼,而無需等待回復。 對於單個實例的第二個場景,這可能是最好的。

但是,它還取決於服務器組件的編碼方式。 如果它是一個Web服務,您應該能夠同時提交多個請求。 但是,如果它是基於套接字的服務,您可能需要在您的端部進行一些額外的編碼,以便處理多個傳入連接,甚至創建套接字。

因此,簡而言之,不同的實例與服務器端限制內的單線程執行行為相同,能夠處理多個並發連接。

至於單個實例,如果你使用回調過程,這可以讓你得到你想要的東西而不用太多頭痛。 但是,它也受限於服務器端代碼的限制。

我說明服務器限制的原因是,有些公司將構建限制來自出站主機的連接數的Web服務,因此您的吞吐量受此限制。 因此,您可以使用的有效線程數將減少或過時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM