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