本頁是否能提供幫助?
您對此內容的意見反應十分重要。 請告訴我們您的想法。
其他意見反應?
剩餘 1500 個字元
匯出 (0) 列印
全部展開

步驟 4:主控和執行基本 Web 服務以向服務匯流排登錄

更新日期: 2015年6月

此為建立基本 服務匯流排 服務應用程式和可呼叫服務的用戶端所需之七個工作中的第四個。如需這六項工作的概觀,請參閱 服務匯流排轉送訊息教學課程 主題。本主題說明如何執行基本 服務匯流排 服務。

緊接在程序之後的範例會提供在此工作中撰寫的程式碼完整清單。

預估完成時間:10 分鐘

  1. 將 Microsoft.ServiceBus.dll 的參考新增至專案:請參閱使用 NuGet 服務匯流排封裝

    note附註
    使用命令列編譯器 (例如,Csc.exe) 時,您還必須提供組件路徑。

  2. 在 Program.cs 中,為 Microsoft.ServiceBus 命名空間新增 using 陳述式。

    using Microsoft.ServiceBus;
    

    Microsoft.ServiceBus 是包含 API 的命名空間,而 API 可讓您以程式設計方式存取 服務匯流排 多項核心功能。您最可能在所有 服務匯流排 應用程式中使用此命名空間。

  3. Main() 方法中,建立兩個變數存放服務命名空間的變數,以及從主控台視窗讀取的 SAS 金鑰。

    Console.Write("Your Service Namespace: ");
    string serviceNamespace = Console.ReadLine();
    Console.Write("Your SAS key: ");
    string sasKey = Console.ReadLine();
    
    
    
    

    我們稍後會使用 SAS 金鑰來存取您服務匯流排專案。服務命名空間 會以參數形式傳遞至 CreateServiceUri,以建立服務 URI。

  4. 使用 TransportClientEndpointBehavior 物件,宣告您將使用 SAS 金鑰作為認證類型。將下列程式碼直接新增至最後一個步驟中新增的程式碼之下。

    TransportClientEndpointBehavior sasCredential = new TransportClientEndpointBehavior();
    sasCredential.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", sasKey);
    

  1. 緊接在您於最後一個步驟中新增的程式碼之後,為服務的基底位址建立 Uri 執行個體。此 URI 可指定 服務匯流排 配置、服務命名空間 以及服務介面的路徑。

    Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");
    

    “sb” 是 服務匯流排 配置的縮寫,表示我們使用 TCP 作為通訊協定。當 NetTcpRelayBinding 已指定為繫結時,先前也在設定檔中指出這一點。

    如需此教學課程,URI 為 sb://putServiceNamespaceHere.windows.net/EchoService

  1. 將連線模式設定為 AutoDetect

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    

    連線模式可描述服務用來與 服務匯流排 通訊的通訊協定;不是 HTTP 就是 TCP。使用預設設定 AutoDetect,此服務會嘗試透過 TCP 和 HTTP (若無法使用 TCP) 連線至 服務匯流排。請注意,這與服務針對用戶端通訊所指定的通訊協定不同。該通訊協定是由使用的繫結所決定。例如,服務可以使用 BasicHttpRelayBinding 繫結,此繫結指定其端點 (公開於 服務匯流排 上) 透過 HTTP 與用戶端通訊。該項相同服務可以指定 ConnectivityMode.AutoDetect,如此服務即可透過 TCP 與 服務匯流排 通訊。

  2. 使用本節稍早建立的 URI,建立服務主機。

    ServiceHost host = new ServiceHost(typeof(EchoService), address);
    

    此服務主機為可具現化服務的 WCF 物件。在此,您可將想要建立的服務型別 (EchoService 型別) 傳遞給它,並同時傳遞至您要公開服務的位址。

  3. 在 Program.cs 檔案的頂端,新增 System.ServiceModel.DescriptionMicrosoft.ServiceBus.Description 的參考。

    using System.ServiceModel.Description;
    using Microsoft.ServiceBus.Description;
    
  4. 回到 Main() 中,設定要啟用公共存取的端點。

    IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);
    

    此步驟會通知 服務匯流排,藉由檢查專案的 服務匯流排 ATOM 摘要,即可公開找到您的應用程式。如果將 DiscoveryType 設定為 private,用戶端仍可存取服務。不過,服務在搜尋 服務匯流排 命名空間時並不會出現。用戶端反而必須事先知道端點路徑。如需詳細資訊,請參閱探索和公開服務匯流排服務

  5. 將服務認證套用至在 App.config 檔案中定義的服務端點:

    foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
    {
        endpoint.Behaviors.Add(serviceRegistrySettings);
        endpoint.Behaviors.Add(sasCredential);
    }
    

    如前一個步驟所述,您可能已在設定檔中宣告多個服務和端點。如果您已這麼做,此程式碼會周遊設定檔,並搜尋應套用您的認證的每個端點。不過,在此教學課程中,設定檔只有一個端點。

  1. 開啟服務。

    host.Open();
    
  2. 通知使用者服務正在執行中,並說明如何關閉服務。

    Console.WriteLine("Service address: " + address);
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  3. 完成時,請關閉服務主機。

    host.Close();
    
  4. 按下 [F6] 以建置專案。

範例

下列範例包含來自教學課程內先前步驟的服務合約與實作,以及在主控台應用程式中裝載服務。將下列程式碼編譯成名為 EchoService.exe 的可執行檔。

using System;
using System.ServiceModel;
using System.ServiceModel.Description;
using Microsoft.ServiceBus;
using Microsoft.ServiceBus.Description;

namespace Microsoft.ServiceBus.Samples
{
    [ServiceContract(Name = "IEchoContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]

    public interface IEchoContract
    {
        [OperationContract]
        String Echo(string text);
    }

    public interface IEchoChannel : IEchoContract, IClientChannel { };

    [ServiceBehavior(Name = "EchoService", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]

    class EchoService : IEchoContract
    {
        public string Echo(string text)
        {
            Console.WriteLine("Echoing: {0}", text);
            return text;
        }
    }

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

            ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;

            
            
            Console.Write("Your Service Namespace: ");
            string serviceNamespace = Console.ReadLine();
            Console.Write("Your SAS key: ");
            string sasKey = Console.ReadLine();







           // Create the credentials object for the endpoint.
            TransportClientEndpointBehavior sasCredential = new TransportClientEndpointBehavior();
            sasCredential.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", sasKey);



            // Create the service URI based on the service namespace.
            Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");

            // Create the service host reading the configuration.
            ServiceHost host = new ServiceHost(typeof(EchoService), address);

            // Create the ServiceRegistrySettings behavior for the endpoint.
            IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);

            // Add the Service Bus credentials to all endpoints specified in configuration.
            foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
            {
                endpoint.Behaviors.Add(serviceRegistrySettings);
                endpoint.Behaviors.Add(sasCredential);
            }
            
            // Open the service.
            host.Open();

            Console.WriteLine("Service address: " + address);
            Console.WriteLine("Press [Enter] to exit");
            Console.ReadLine();

            // Close the service.
            host.Close();
        }
    }
}

現在已建立介面,請繼續進行步驟 5:建立服務合約的 WCF 用戶端以實作介面。

顯示:
© 2015 Microsoft