匯出 (0) 列印
全部展開

步驟 2:定義 REST 式 WCF 服務合約以搭配服務匯流排使用

更新日期: 2015年3月

此為建立基本 REST 式 服務匯流排 服務所需的四個工作中的第二個。如需這四項工作的概觀,請參閱 Service Bus REST 教學課程

如同其他 服務匯流排 服務一樣,當您建立 REST 式服務時,您必須定義合約。合約可指定主機所支援的作業。您可以將服務作業視為 Web 服務方法。合約的建立方式為定義 C++、C# 或 Visual Basic 介面。介面中的每個方法都對應到特定的服務操作。ServiceContractAttribute 屬性必須套用到每個介面,而 OperationContractAttribute 屬性則必須套用到每項作業。如果具有 ServiceContractAttribute 的介面中的方法沒有 OperationContractAttribute,則不會公開該方法。在程序後面的範例中,顯示用於這些工作的程式碼。

基本 服務匯流排 合約和 REST 式合約的主要差異在於將以下屬性新增至 OperationContractAttributeWebGetAttribute。此屬性可讓您將介面中的方法對應至介面另一側的方法。在此情況下,我們會使用 WebGetAttribute 將方法連結至 HTTP GET。這麼做可讓 服務匯流排 準確擷取和解譯傳送到介面的命令。

預期的完成時間:10 分鐘。

  1. 在 [開始] 功能表的 [Visual Studio] 上按一下滑鼠右鍵,並選取 [以系統管理員身分執行],即可以系統管理員身分開啟此程式。

  2. 建立新的主控台應用程式專案。按一下 [檔案] 功能表,然後依序選取 [新增] 和 [專案]。在 [新增專案] 對話方塊中,選取 [Visual C#] (如果 [Visual C#] 未出現,請在 [其他語言] 之下尋找),再選取 [主控台應用程式] 範本,然後將它命名為 ImageListener。請使用預設 [位置]。按一下 [確定] 建立專案。

  3. 若為 C# 專案,Visual Studio 會建立名為 Program.cs 的檔案。此類別會包含名為 Main() 的空白方法。需要有這個方法,才能正確建置主控台應用程式專案。因此,您可以放心地將它留在專案中。

  4. System.ServiceModel.dll 的參考新增至專案:

    1. 在 [方案總管] 中,於專案資料夾底下的 [參考] 資料夾上按一下滑鼠右鍵,然後按一下 [新增參考]。

    2. 選取 [新增參考] 對話方塊中的 [.NET] 索引標籤並向下捲動,直到您看見 [System.ServiceModel] 為止,並加以選取。然後按一下 [確定]

    note附註
    使用命令列編譯器 (例如,Csc.exe) 時,您還必須提供組件路徑。例如,在執行 的電腦上,此路徑預設為:Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation。

  5. 重複前一個步驟,新增 System.ServiceModel.Web.dll 組件的參考。

  6. System.ServiceModelSystem.ServiceModel.ChannelsSystem.ServiceModel.WebSystem.IO 命名空間新增 using 陳述式。

    using System.ServiceModel;
    using System.ServiceModel.Channels;
    using System.ServiceModel.Web;
    using System.IO;
    
    

    System.ServiceModel 是可讓您以程式設計方式存取 Windows Communication Foundation (WCF) 基本功能的命名空間。服務匯流排 使用 WCF 的許多物件和屬性來定義服務合約。您將在大多數 服務匯流排 應用程式中使用此命名空間。同樣地,System.ServiceModel.Channels 可協助定義通道,這就是您用來與 服務匯流排 和用戶端 Web 瀏覽器通訊的物件。最後,System.ServiceModel.Web 包含可讓您建立 Web 應用程式的類型。

  7. 將程式的命名空間從 Visual Studio 預設值重新命名為 Microsoft.ServiceBus.Samples

    namespace Microsoft.ServiceBus.Samples
    {
    ...
    
    
  8. 直接在命名空間宣告之後,定義名為 IImageContract 的新介面,並將 ServiceContractAttribute 屬性套用至值為 http://samples.microsoft.com/ServiceModel/Relay/ 的介面。此命名空間值與您在整個程式碼範圍內使用的命名空間不同。此命名空間值會作為此合約的唯一識別碼,且必須具有版本設定資訊。如需詳細資訊,請參閱,請參閱服務版本設定。明確指定命名空間可避免將預設命名空間值新增至合約名稱。

    [ServiceContract(Name = "ImageContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/RESTTutorial1")]
    public interface IImageContract
    {
    }
    
    
  9. IImageContract 介面中,針對 IImageContract 合約在介面中公開的單一作業宣告方法,並將 OperationContractAttribute 屬性套用至您想當作公用 服務匯流排 合約的一部分公開的方法。

    public interface IImageContract
    {
        [OperationContract]
        Stream GetImage();
    }
    
  10. OperationContract 屬性旁邊,套用 WebGet 屬性。

    
    public interface IImageContract
    {
        [OperationContract, WebGet]
        Stream GetImage();
    }
    

    這麼做可讓 服務匯流排 將 HTTP GET 要求傳送至 GetImage,並將 GetImage 的傳回值轉譯成 HTTP GETRESPONSE 回覆。在後面的教學課程中,您將使用 Web 瀏覽器來存取此方法,以及在瀏覽器中顯示影像。

  11. 直接在 IImageContract 定義下面,宣告同時繼承自 IImageContractIClientChannel 介面的通道:

    [ServiceContract(Name = "IImageContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
    public interface IImageContract
    {
        [OperationContract, WebGet]
        Stream GetImage();
    }
    
    public interface IImageChannel : IImageContract, IClientChannel { }
    

    通道是服務和用戶端彼此用來傳遞資訊的 WCF 物件。稍後,您將在主機應用程式中建立通道。服務匯流排 會接著使用此通道將 HTTP GET 要求從瀏覽器傳遞至您的 GetImage 實作。服務匯流排 也會利用此通道來取得 GetImage 傳回值,並將此值轉譯成用戶端瀏覽器的 HTTP GETRESPONSE。

  12. 按一下 [建置] 功能表中的 [建置方案],以確認工作的準確性。

範例

下列程式碼範例顯示可定義 服務匯流排 合約的基本介面。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Web;
using System.IO;

namespace Microsoft.ServiceBus.Samples
{

    [ServiceContract(Name = "IImageContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
    public interface IImageContract
    {
        [OperationContract, WebGet]
        Stream GetImage();
    }

    public interface IImageChannel : IImageContract, IClientChannel { }

    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

現在已建立介面,請繼續進行步驟 3:實作 REST 式 WCF 服務合約以使用服務匯流排以實作介面。

另請參閱

顯示:
© 2015 Microsoft