我之前使用過Web服務並理解了這個概念。但是現在我已經建立了一個WCF Web服務,但是我對它的使用有個疑問。 (在本教程中如何設置)使用WCF Webservice引用
我有以下幾點設置:
- WCF服務庫(稱爲CalculatorService的)
- 服務主機(稱爲CalculatorServiceHost)
- 服務代理(叫CalculatorServiceProxy,使用ClientBase)
- 服務客戶端(稱爲CalculatorServiceClient)
我的理解如下;
- 服務庫包含可以在web服務中使用的服務/對象。讓我們說這是一個加法的計算器。
- 主機使該類具有可用於客戶端的功能。
- 代理髮送和接收來自客戶端的消息到配置的端點。
- 客戶端可以通過代理從服務調用函數。
的教程建立代理如下:
public class MyCalculatorServiceProxy : ClientBase<ICalculator>, ICalculator {
public int Add(int num1, int num2){
return base.Channel.Add(num1, num2);
}
}
這意味着,在代理我至少引用其包含ICalculator組裝。如果客戶缺少對同一個程序集的引用,則客戶也抱怨沒有提及該接口。
在本教程中,繼承接口的接口和類/服務位於同一個程序集中。因此,在客戶端引用程序集的接口意味着你也可以創建'Calculator'類的實例,甚至不需要WCF服務來調用函數。
這是否意味着您始終需要兩個帶WCF服務的程序集。一個具有接口,另一個具有類/服務?
糾正我,如果我錯了,或者如果有人有一些額外的信息/評論。
是的,基本上你應該總是分開合同和運作的東西。合同是界面,請求和響應 –
不,您可以在同一個程序集中擁有服務合同和服務實現。有時將它們分開很有用 - 例如,在工作中,我們在單獨的程序集中有服務合同(接口)。這允許客戶端引用程序集並使用ChannelFactory'爲客戶端生成代理。但是把它們放在一個裝配中是完全合理的。 –
Tim
您不需要參考計算器程序集,就可以使用wsdl生成代理。或者,如果wcf服務公開了元數據,您可以添加Web引用,它將創建代理。但我建議將合同和poco類分離到自己的程序集中,以便在客戶端和服務器中引用它們。 –