挖掘WCF客戶端編程技巧
客戶端編程是很重要的部分,WCF經過長時間的發(fā)展,很多用戶都很了解WCF了,這里我發(fā)表一下個人理解,和大家討論討論。為了調用服務上的操作,WCF客戶端首先需要把服務合同導入到客戶端的本地描述中。這意味著,該服務需要客戶端暴露一個標準方法以檢索它的元數據-這是通過讓服務暴露一個元數據交換(MEX)端點來實現的。只要服務在宿主上注冊至少一個TCP、HTTP或IPC基地址,那么,這個基于WCF的服務就能夠自動地暴露一個MEX端點。
#T#如果客戶端使用WCF,那么調用操作的普通方法是使用一個代理。這個代理是一個CLR類,它暴露單個描述服務合同的CLR接口。注意,如果該服務支持若干合同,那么WCF客戶端需要對于每一種合同類型都創(chuàng)建一個相應代理。代理負責提供與服務的合同相同的操作,而且還提供其它方法來管理代理的生命周期和到服務的連接。該代理完整地封裝該服務的每一個方面:服務的位置,服務的實現技術及其運行時刻平臺和通訊傳輸。
你可以使用Visual Studio 2005來導入服務元數據并且生成一個代理。如果服務是自宿主的,那么首先要啟動該服務,然后從WCF客戶端工程的上下文菜單中選擇"Add Service Reference…"。如果服務宿主在IIS或WAS上,那么就不需要預啟動該服務了。
有趣的是,如果服務是自宿主在與客戶端工程同一個方案中的另一個工程中,那么你可以在Visual Studio 2005中啟動宿主并且仍然添加參考,因為不同于大多數工程設置,這個選項是無法禁止的(見圖)。這會導致調出"Add Service Reference"對話框,你需要在其中提供服務的基地址(或一個基地址和一個MEX URI)以及包含代理的命名空間。
圖.你可以使用Visual Studio 2005生成一個代理。
Visual Studio 2005使用SvcUtil.exe命令行工具,并且你可以自己使用它。主要理由是,你可以使用SvcUtil開關所提供的眾多的選項。為了直接使用 SvcUtil,你可以提供給它MEX地址并且,作為選擇,還可以提供一個代理文件名。默認的代理文件名是實現該服務的服務端類的名字。例如,當把服務 MyService宿主在IIS中時,簡單地運行下列命令行:
- vcUtil http://localhost/MyService/MyService.svc /out:Proxy.cs