日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

WinVista新技術(shù) WCF開發(fā)指南之客戶端開發(fā)

作者:朱先忠編譯
一. 客戶端編程

為了調(diào)用服務(wù)上的操作 , 客戶端首先需要把服務(wù)合同導(dǎo)入到客戶端的本地描述中 。這意味著 , 該服務(wù)需要客戶端暴露一個標(biāo)準(zhǔn)方法以檢索它的元數(shù)據(jù)-這是通過讓服務(wù)暴露一個元數(shù)據(jù)交換(MEX)端點來實現(xiàn)的 。只要服務(wù)在宿主上注冊至少一個TCP、HTTP或IPC基地址 , 那么 , 這個基于WCF的服務(wù)就能夠自動地暴露一個MEX端點 。

如果客戶端使用WCF , 那么調(diào)用操作的普通方法是使用一個代理 。這個代理是一個CLR類 , 它暴露單個描述服務(wù)合同的CLR接口 。注意 , 如果該服務(wù)支持若干合同 , 那么客戶端需要對于每一種合同類型都創(chuàng)建一個相應(yīng)代理 。代理負(fù)責(zé)提供與服務(wù)的合同相同的操作 , 而且還提供其它方法來管理代理的生命周期和到服務(wù)的連接 。該代理完整地封裝該服務(wù)的每一個方面:服務(wù)的位置 , 服務(wù)的實現(xiàn)技術(shù)及其運(yùn)行時刻平臺和通訊傳輸 。

你可以使用Visual Studio 2005來導(dǎo)入服務(wù)元數(shù)據(jù)并且生成一個代理 。如果服務(wù)是自宿主的 , 那么首先要啟動該服務(wù) , 然后從客戶端工程的上下文菜單中選擇"Add Service Reference…" 。如果服務(wù)宿主在IIS或WAS上 , 那么就不需要預(yù)啟動該服務(wù)了 。

有趣的是 , 如果服務(wù)是自宿主在與客戶端工程同一個方案中的另一個工程中 , 那么你可以在Visual Studio 2005中啟動宿主并且仍然添加參考 , 因為不同于大多數(shù)工程設(shè)置 , 這個選項是無法禁止的(見圖6) 。這會導(dǎo)致調(diào)出"Add Service Reference"對話框 , 你需要在其中提供服務(wù)的基地址(或一個基地址和一個MEX URI)以及包含代理的命名空間 。


圖6.你可以使用Visual Studio 2005生成一個代理 。
Visual Studio 2005使用SvcUtil.exe命令行工具 , 并且你可以自己使用它 。主要理由是 , 你可以使用SvcUtil開關(guān)所提供的眾多的選項 。為了直接使用SvcUtil , 你可以提供給它MEX地址并且 , 作為選擇 , 還可以提供一個代理文件名 。默認(rèn)的代理文件名是實現(xiàn)該服務(wù)的服務(wù)端類的名字 。例如 , 當(dāng)把服務(wù)MyService宿主在IIS中時 , 簡單地運(yùn)行下列命令行:

 SvcUtil http://localhost/MyService/MyService.svc /out:Proxy.cs

借助于自宿主 , 你可以不受限于僅使用HTTP基地址 。假定自宿主服務(wù)注冊這些基地址:

http://localhost:8002
net.tcp://localhost:8003
net.pipe://localhost/MyPipe
然后 , 啟動宿主 , 則你可以使用任何下列命令之一來生成該代理:

SvcUtil http://localhost:8002/MEX /out:Proxy.cs
SvcUtil http://localhost:8002/ /out:Proxy.cs
SvcUtil net.tcp://localhost:8003/MEX /out:Proxy.cs
SvcUtil net.pipe://localhost/MyPipe /MEX/out:Proxy.cs
該代理類沒有對服務(wù)實現(xiàn)類的參考 , 而只參考服務(wù)暴露的合同 。這個代理可以與一個提供地址和綁定的客戶端配置文件一起使用 , 也可以在沒有配置文件的情況下使用 。注意 , 每一個代理實例都準(zhǔn)確地指向一個端點 , 與之交互的端點在構(gòu)造時刻提供給代理 。

二. 管理客戶端配置

客戶端需要知道服務(wù)所在地并使用與它的服務(wù)相同的綁定;當(dāng)然 , 也要以代理的形式導(dǎo)入服務(wù)合同 。實質(zhì)上 , 這與在服務(wù)的端點處捕獲的信息完全一致 。為了反映這一信息 , 客戶端配置文件包含關(guān)于目標(biāo)端點的信息并且甚至使用與宿主相同的模式 。

例如 , 列表6(見本文相應(yīng)下載源碼)顯示了與一個服務(wù)(其宿主是根據(jù)列表2進(jìn)行配置的)進(jìn)行交互需要的客戶端配置文件 。注意 , 在這個客戶端配置文件中的合同類型(和命名空間)是由SvcUtil生成的導(dǎo)入的類型(和命名空間 , 如果有的話) , 而不是服務(wù)類型和命名空間 。該客戶端配置文件可以列出與服務(wù)支持一樣多的端點 , 并且該客戶端可以使用任何其中之一來與該服務(wù)交互 。列表7(見本文相應(yīng)下載源碼)展示了客戶端配置文件-它匹配顯示于列表3中的宿主配置文件 。

推薦閱讀