2013-07-20 52 views
-1

您知道如何向您的客戶端添加服務引用,然後創建這個不錯的代理,以便您可以在服務器端調用方法?事情是這樣的:關於WCF代理會話的問題

MyServiceClient proxy = new MyServiceClient(); 
proxy.GetMessage(); 

我有一個關於剛剛發生了什麼幾個問題:

  1. 當與服務器的會話建立的?當我添加服務參考?當我創建代理?或者當我調用該方法?

  2. 如果我將創建另一個MyServiceClient實例它將是我們之前創建的實例(代理)的單例副本,還是完全是一個新實例?

+0

Visual Studio連接到服務,獲取其元數據(描述),並從中產生代理類。沒有涉及的會話。默認情況下,客戶端類只是普通類 - 您可以隨意實例化任意數量的副本 - 在任何地方都不會看到單例。 –

回答

0

默認情況下沒有'會話'。當您撥打服務電話時會建立一個新的連接,並且僅在收到響應之前持續。如果要分組多個呼叫(以確保它們使用相同的實例並依次執行處理),則需要在服務合同上使用SessionMode屬性,這會影響代理客戶端的行爲方式。

+0

因此,如果沒有會話PerCall上下文模式和PerSession(當doe的服務器實例在PerSession上下文模式下創建/刪除時有什麼區別?) – RiskX

+1

至於PerCall和PerSession之間的區別,這是另一個帖子http上的類似問題://stackoverflow.com/questions/15104960/persession-vs-percall – otaku

0

會話建立。這是可選的 - WCF中的默認值是沒有會話。 一般來說,如果您創建一個新的代理,那麼它是完全獨立於以前的代理。也有一些例外:

  • 你可以強迫你的代理服務器使用相同的會話(例如,如果你給他們共享令牌的共同客戶的安全行爲)
  • 服務器可以決定它把所有的請求屬於到同一個會話(PerHost實例化),在這種情況下,所有請求(來自所有代理,而不僅僅是機器上的那些請求)將落在相同的服務器上下文中。