2012-01-17 48 views
1

我是WCF新手。是當服務被實例化WCF連接

SampleService client = new SampleService(); 

或者它連接和斷開時的方法被稱爲客戶端上的客戶端連接?

client.sampleMethod(); 

我想連接到客戶端並通過同一連接發送多條消息。這可能嗎?

+1

它將在使用時連接,並且對服務進行多次調用應該沒有任何問題。當完成時明確關閉它可能是一個好主意。 – Jontatas 2012-01-17 09:12:33

回答

1

要回答第二個問題:連接保持打開狀態by default

對於第一個,以及作爲對上述說明的澄清:它取決於綁定。對於初學者來說,ClientBase<TChannel>(它是一個WCF代理客戶端從中繼承而來)中沒有Connect()方法,所以不會調用它,因爲它會引發編譯器錯誤。

到服務的第一次呼叫時連接到服務;構造函數只會使客戶端對象處於可用狀態,而不會連接到服務。

+0

所以做client.Open()將保持相同的連接活着,直到我打電話client.Close()?所以我可以打開客戶端在同一連接上發送多條消息,然後關閉。這是性能的最佳策略嗎?謝謝 – ministrymason 2012-01-17 10:47:52

+0

@ministrymason,這是正確的。儘管如此,它依賴於綁定。當你調用'Open()'時,basicHttp綁定將不會執行任何操作,它將在第一次調用服務方法時打開連接。 – CodeCaster 2012-01-17 11:13:05

0

它在使用服務時連接。你也需要調用client.Close(),如果你想這樣寫。我們主要寫這樣的服務電話:

using(var client = new SampleServiceClient()){ 
    client.MethodA(); 
    client.MethodB(); 
} 

所以是的,你可以調用一個服務實例的多個方法。通過編寫使用語句,確保服務在使用後處置。

或者,如果你喜歡:

var client = new SampleServiceClient(); 
client.MethodA(); 
client.MethodB(); 
client.Close(); 
+2

不,不是。該通道在對client.MetodA()的調用中打開;嘗試通過設置一個錯誤的終端地址並嘗試新建一個新客戶端。這會在調用MethodA時導致一個exeption,而不是在新的SampleServiceClient() – KMan 2012-01-17 09:21:12

+2

上,而不是在服務代理中使用use using語句。微軟解釋了爲什麼在http://msdn.microsoft.com/en-us/library/aa355056.aspx – KMan 2012-01-17 09:23:42

+0

@KMan我知道微軟的建議,但這是不正確的。關於這個話題有多篇博客文章,這是社區討論的焦點。這是你必須爲自己選擇的選擇。 – JoJa 2012-01-17 09:31:27

0

您將需要調用生成的代理它的連接方法。

例如

SampleServiceProxy client = new SampleServiceProxy(); 
client.Connect() 
client.SampleMethod() 
+2

您不需要在客戶端調用Connect,只需實例化並調用方法即可。 – Jontatas 2012-01-17 09:37:34

+0

你是對的,愚蠢的我:-) – msjonathan 2012-01-17 14:58:41