匯出 (0) 列印
全部展開

作法: 設計 WCF 服務合約以便用於服務匯流排

更新日期: 2014年6月

當您建立 Microsoft Azure 服務匯流排 專案之後,即可開始撰寫程式碼。撰寫程式碼的第一個步驟是定義您的服務應用程式用來與用戶端應用程式通訊的介面。此介面亦稱為服務合約,幾乎與 Windows Communication Foundation (WCF) 合約完全相同:它會定義介面名稱,同時也會定義此介面所公開的方法與屬性。您可以使用 WCF 樣式的屬性,將資訊新增至合約中,並使用相同語法來執行此動作。 主要差別在於 服務匯流排 轉送是 WCF 的延伸模組。 因此,您還必須定義連線至 服務匯流排 的通道。但是,WCF 的其他延伸模組會使用類似的通道。 所以,通道本身對 服務匯流排 而言並非唯一的。 下列討論為建立 服務匯流排 合約的簡短概觀。

如同 WCF,服務和用戶端應用程式都需要在它們的程式碼中具備一份合約。有四種方式可執行此動作:

  1. 手動定義合約 - 此為預設值,通常是您在開發介面時最常用到的方式。本節稍後會說明執行此動作的簡化程序。如需完整討論,請參閱 WCF 文件中的 Designing Service Contracts

  2. 從服務程式碼複製合約 - 這會從服務程式碼複製並貼上合約,或者在專案中共用合約。當您擁有程式碼的快速存取權時 (例如,當您同時身兼撰寫用戶端的開發人員時),即可實現此方法。 Azure SDK 共用中的許多範例應用程式會因為用戶端與服務位於相同專案內,而共用相同的介面定義。

  3. 使用 ServiceModel 中繼資料公用程式工具 (Scvutil.exe) - 此為您在執行中服務應用程式上指向公開之中繼資料端點的應用程式。它會傳回包含相關聯服務合約的檔案。本節稍後會說明執行此動作的簡化程序。 如需完整討論,請參閱 WCF 文件中的Accessing Services Using a WCF ClientServiceModel Metadata Utility Tool (Svcutil.exe)。 在 服務匯流排 應用程式上使用 Svcutil.exe 的主要差異在於,傳送至工具的是 服務匯流排 的 URI,而非本機主機的 URI。請注意,Svcutil.exe 會要求目標服務公開適當的中繼資料。如需詳細資訊,請參閱 作法:公開中繼資料端點.

  4. 透過 Visual Studio 新增服務參考 - 此為 Svcutil.exe 的 UI 版本,可透過 Visual Studio 環境進行存取。本節稍後會說明存取 [新增服務參考] 對話方塊的簡化程序。如需詳細資訊,請參閱 作法:新增、更新或移除服務參考 (位於 Visual Studio 文件中)。如先前所述,新增服務參考會要求目標服務透過中繼資料端點公開所需的資訊。

  1. 您可以藉由將 System.ServiceModel.ServiceContractAttribute 屬性套用至定義要實作服務之方法的介面,來建立服務合約。

    [ServiceContract]
    public interface IMyContract
    {
        void Send(int count);
    }
    
    
  2. 指出用戶端可以藉由將 System.ServiceModel.OperationContractAttribute 屬性套用至介面中的哪些方法來叫用它們。

    [ServiceContract]
    public interface IMyContract
    {
        [OperationContract]
        void Send(int count);
    }
    
    
  3. 在宣告合約時,最好是明確定義您的合約名稱,以及應用程式的命名空間。這樣做能夠防止基礎架構使用預設的名稱和命名空間值。請注意,這並非 服務命名空間:在此情況下,它代表合約的唯一識別碼,應包含某些種類的版本資訊。

    [ServiceContract(Name = "IMyContact", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/MyContractV1")]
    public interface IMyContract
    {
        [OperationContract]
        void Send(int count);
    }
    
    
  4. 宣告繼承自介面,同時也繼承自 IClientChannel 介面的通道。

    [ServiceContract(Name = "IMyContact", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/MyContractV1")]
    public interface IMyContract
    {
        [OperationContract]
        void Send(int count);
    }
    
    public interface IOnewayChannel : IOnewayContract, IClientChannel { }
    
  5. 如果您在建立服務應用程式,請在程式碼的其他地方實作介面。

  1. 在您嘗試擷取中繼資料之前,請確定服務正在執行中。

  2. 使用命令列,移至在 Windows SDK 中取得之 Svcutil.exe 的位置。

    預設安裝路徑為 C:\Program Files\Microsoft SDKs\Windows\<version>\Bin。

    從命令列中,執行下列命令:

    Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>
    

    如果目標位址已公開適當的中繼資料,您將會擷取包含 WCF 用戶端程式碼的檔案,而用戶端應用程式可使用該程式碼來啟動服務應用程式。

  1. 在 [方案總管] 中,以滑鼠右鍵按一下要新增服務的專案名稱。然後,按一下 [新增服務參考]。

    即會出現 [新增服務參考] 對話方塊。

  2. 在 [位址] 方塊中,輸入服務的 URL。然後,按一下 [執行] 以搜尋服務。如果服務會實作使用者名稱/密碼安全性,則您可能會看見使用者名稱和密碼的提示。

  3. 在 [服務] 清單中,展開要使用之服務的節點,然後選取服務合約。

  4. 在 [命名空間] 方塊中,輸入要針對參考使用的命名空間。

  5. 按一下 [確定],將參考新增至專案中。

  6. 即會產生服務用戶端 (Proxy),並將說明服務的中繼資料新增至 App.config 檔案中。

顯示:
© 2014 Microsoft