2013年2月27日 星期三

建立 WCF 服務類別庫

建立 WCF Service Library 專案

1. 建立WCF Service Library專案

這個專案範本預設會幫我們加入:IService1.cs、Service1.cs、和App.config。 可以依以下步驟更改成我們想要的名稱。

2. 替服務介面更名

3. 在介面中加入新的服務方法

當加入服務方法時,必須先定義一個 Contract, 用來說明服務包含哪些 Operation, 要使用哪種 Message Pttern。 在服務合約中至少要有一個標示為 OperationContract 的方法,否則載入服務時會有例外。

4. 替服務類別更名,並實作 ICalcService 介面

底下是精簡過的ICalcService.cs程式碼。 包含一個 ICalcService 介面和 CompositeType 類別。 其中 ICalcService 介面套用屬性 ServiceContract,表示它是定義服務合約的介面,裡面就是用來定義要提供給用戶端呼叫的操作。 而 CompositeType 類別則套用屬性 DataContract,表示它是用來定義呼叫操作時所需傳遞的資料型別。

[ServiceContract]
    public interface ICalcService
    {
        // TODO: 在此新增您的服務作業
        [OperationContract]
        string Add(int a, int b);
    }

    [DataContract]
    public class CompositeType
    {
        bool boolValue = true;
        string stringValue = "Hello ";

        [DataMember]
        public bool BoolValue
        {
            get { return boolValue; }
            set { boolValue = value; }
        }

        [DataMember]
        public string StringValue
        {
            get { return stringValue; }
            set { stringValue = value; }
        }
    }

5. 按F5執行

在 Visual Studio 中執行一個 WCF 類別庫,實際上是 VS 啟動「WCF 服務主機」(WcfSvcHost.exe),並自動掛載這些 WCF 服務。 所以你可以在桌面的右下角看到以下提示訊息。

6. 測試 WCF 服務

通常當 WCF 裝載到服務主機上之後,你必須另外建立用戶端程式,以進行 WCF 服務的測試工作。 不過, Visual Studio 除了提供「WCF 服務主機」,另外也提供一個「WCF測試用戶端」(WcfTestClient.exe)。 當WCF服務主機裝載服務完成之後,就會自動開啟WCF測試用戶端工具。如下圖:

在WCF測試用戶端中,你只要雙擊測試的方法,WCF測試工具就建立測試的介面讓你輸入測試資料,再按下「叫用」按鈕即可進行測試。

變更預設的繫結類型

當建立 WCF Service 時,預設會使用 wsHttpBinding 這個繫結類型, 下面示範如何建立一個 basicHttpBinding 繫結類型,並將變更服務的繫結類型。

1.開啟組態設定工具

2.將預設的 wsHttpBinding 修改成 basicHttpBinding

3.新增繫結組態 (BindingConfiguration)

3.1 點選新增繫結組態

3.2 選取 basicHttpBinding 繫結類型

3.3 設定 SendTimeOut 為 10 分鐘

3.4 CTRL+S 儲存

4. 設定服務的繫結組態

將服務的 BindingConfiguration 設定成上一步驟新增的繫結組態

5.F5, Run,可以正確執行運算

備註:

WSHttpBinding 與 BasicHttpBinding 類似,不過前者提供更多的 Web 服務功能。 它使用 HTTP 傳輸並提供訊息安全性,如同 BasicHttpBinding,不過它也提供交易、可靠傳訊以及 WS-Addressing。

裝載 WCF 服務

上面範例中,我們已經建立好 WCF service。 contract 的定義是放在 ICalcService 介面中, contract 的實作則放在 CalcService 類別裡。 而且已經將 endpoint 的繫結組態由預設的 wsHttpBinding 變更成 basicHttpBinding。 底下是 App.config 所顯示的資訊。

<services>
    <service name="TestWcfServiceLibrary.CalcService">
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="NewBinding0"
        contract="TestWcfServiceLibrary.ICalcService">
        <identity>
        <dns value="localhost" />
        </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
        <baseAddresses>
        <add baseAddress="http://localhost:8732/Design_Time_Addresses/TestWcfServiceLibrary/Service1/" />
        </baseAddresses>
    </host>
    </service>
</services>

WCF 服務必須運行於 host process 中,這個 host process 可以是 IIS 、WAS、Windows 服務、或你自己開發的 .NET 應用程式(即所謂的 self-hosting)。運行於 IIS 和 WAS 環境都可享有生命週期控制的優點,這裡要示範的是將剛才建立的 WCF 服務部署到 IIS。

  1. 在 IIS 中建立一個網站,指定一個連接埠,如 8060 ,實體路徑指向一個新建立的空資料夾。 例如:D:\myProject\WCF_Service。 並將驗證選項設定成「啟用匿名存取」。
  2. 回到 VS2008,在方案總管中的專案名稱上點右鍵,選 Publish,參考下圖設定:

  3. 部署完成後,到實際部署的資料夾中看一下產生了哪些檔案。你應該會看到:

    PS.

    其實發行所做的事情,就是新增一個 .svc 檔,並指定服務的類別名稱。如下所示內容:

    <%@ ServiceHost Service="TestWcfServiceLibrary.Service1" %>
    
  4. 開啟瀏覽器測試一下:網址輸入 http://localhost:8060/TestWcfServiceLibrary.Service1.svc ,若一切順利,應該會看到類似這樣的畫面:

撰寫 WCF 用戶端程式

寫一個簡單的用戶端程式來測試 WCF 服務。步驟如下:

  1. 在測試專案中,在專案的右鍵選單中,執行「加入服務參考」,並完成以下設定:


  2. 編輯測試程式碼:
    protected void btnConnectWCFService_Click(object sender, EventArgs e)
    {
        myCalcService.CalcServiceClient wcf_service;
        using (wcf_service = new myCalcService.CalcServiceClient())
        {
            string result = wcf_service.Add(5, 10);
            myDebug.ResponseBR(result);
        }
    }
    
  3. 執行驗證。

沒有留言:

張貼留言