學習 WCF (3)--開發WCF客戶程式

weixin_34391854發表於2009-05-07

前篇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

 

ContractedBlock.gifExpandedBlockStart.gifCode
<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個建構函式,目的是為了滿足不同情況下的需要:

ContractedBlock.gifExpandedBlockStart.gifCode
[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服務的應用。就寫到這啦。

相關文章