前篇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
<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>
這樣就可以了。
3.程式設計方案
這裡我們主要根據svcutil.exe給我們生成的檔案,手動的編寫自己的程式碼,實現同樣的效果。svcutil.exe生成的代理類檔案中包含了5個建構函式,目的是為了滿足不同情況下的需要:
[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服務的應用。就寫到這啦。