学习 WCF (3)--开发WCF客户程序
前篇Learn WCF (2)--開發WCF服務介紹了開發服務程序,這篇開發一個客戶程序,主要有三種方案:
添加一個Web引用
使用svcutil.exe工具
編程方案
1.添加一個Web引用
這個和添加引用Web服務的方法基本一致,在添加引用的對話框中輸入URL:http://localhost:39113/WCFServiceText/WCFStudentText.svc
為WCF起個名字,點擊添加引用按鈕將會完成如下的任務:
(1)從指定的URL為學生管理服務下載WSDL文件
(2)生成代理類WCFStudentText,它是服務器WCFStudentText的代理,實現了服務器契約IStuServiceContract。
(3)生成響應的配置設置
現在我們就可以用代理類WCFStudentText與學生信息管理服務進行通信了。在站點中添加一個頁面,放入一個GridView和ObjectDataSource
Code<div><asp:GridView?ID="GridView1"?runat="server"?BackColor="White"?????????????BorderColor="#DEDFDE"?BorderStyle="None"?BorderWidth="1px"?CellPadding="4"?
????????????DataSourceID="ObjectDataSource1"?ForeColor="Black"?GridLines="Vertical"><RowStyle?BackColor="#F7F7DE"?/><FooterStyle?BackColor="#CCCC99"?/><PagerStyle?BackColor="#F7F7DE"?ForeColor="Black"?HorizontalAlign="Right"?/><SelectedRowStyle?BackColor="#CE5D5A"?Font-Bold="True"?ForeColor="White"?/><HeaderStyle?BackColor="#6B696B"?Font-Bold="True"?ForeColor="White"?/><AlternatingRowStyle?BackColor="White"?/></asp:GridView><asp:ObjectDataSource?ID="ObjectDataSource1"?runat="server"?TypeName="StuWcfService.WCFStudentText"?SelectMethod="GetStudent"></asp:ObjectDataSource></div>
ObjectDataSourse的優點是不需要編寫一行代碼就可以調用代理類中的方法。這里應當注意的是TypeName,SelectMethod兩個重要屬性的寫法,必須與代理類一致。
2.使用svcutil.exe工具
WCF帶有一個工具svcutil.exe,它自動從指定的URL下載WSDL文檔,為代理類生成并保存一個指定的文件中,用相應的配置設置生成相應的配置文件,執行下面命令:
svcutil.exe工具將自動完成下列工作:
(1)通過URL下載元數據文檔(WSDL文檔)。
(2)為代理類生成代碼,并將代碼保持到WCFStudentServiceClient.cs文件中。
(3)生成配置設置并將其保存到Web.config中。
檢查svcutil.exe多運行的目錄,就會看到文件WCFStudentServiceClient.cs和Web.config。文件中的代碼這里就不考出來了,大家可以自己試一下。將這兩個文件導入到一個站點中。
只需將ObjectDataSource的代碼改為:
<asp:ObjectDataSource?ID="ObjectDataSource1"runat="server"TypeName="代理類名"SelectMethod="調用的方法名"></asp:ObjectDataSource>這樣就可以了。
3.編程方案
這里我們主要根據svcutil.exe給我們生成的文件,手動的編寫自己的代碼,實現同樣的效果。svcutil.exe生成的代理類文件中包含了5個構造函數,目的是為了滿足不同情況下的需要:
Code[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel",?"3.0.0.0")]public?partial?class?StuServiceContractClient?:?System.ServiceModel.ClientBase<IStuServiceContract>,?IStuServiceContract{public?StuServiceContractClient()//默認構造函數????{
????}public?StuServiceContractClient(string?endpointConfigurationName)?:?base(endpointConfigurationName)//參數是一個字符串,包括端點的配置名????{
????}public?StuServiceContractClient(string?endpointConfigurationName,?string?remoteAddress)?:?base(endpointConfigurationName,?remoteAddress)//端點的配置名,端點的網絡地址????{
????}public?StuServiceContractClient(string?endpointConfigurationName,?System.ServiceModel.EndpointAddress?remoteAddress)?:?base(endpointConfigurationName,?remoteAddress)//端點的配置名,端點地址的EndPointAddress對象????{
????}public?StuServiceContractClient(System.ServiceModel.Channels.Binding?binding,?System.ServiceModel.EndpointAddress?remoteAddress)?:?base(binding,?remoteAddress)//端點綁定的Binding對象,端點地址的EndPointAddress對象
????{
????}public?void?AddStudent(WCFStudent.Student?stu)
????{base.Channel.AddStudent(stu);
????}public?WCFStudent.Student[]?GetStudent()
????{return?base.Channel.GetStudent();
????}
}
其中端點的配置名是<client>下<endpoint>子元素下的name屬性。
我們也可以編寫同樣的代碼。來實現WCF服務的應用。就寫到這啦。
??? 文章作者:高維鵬(Brian)
??? 文章出處:http://www.cnblogs.com/gaoweipeng
??? 歡迎轉載,轉載時請注明出處。謝謝合作。
總結
以上是生活随笔為你收集整理的学习 WCF (3)--开发WCF客户程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操盘手(说一说操盘手的简介)
- 下一篇: 一体机找不到扫描仪(一体机扫描仪无法使用