匯出 (0) 列印
全部展開

步驟 7:實作 WCF 用戶端以呼叫服務匯流排

更新日期: 2014年6月

此為建立基本 服務匯流排 服務和可呼叫服務的用戶端所需之七個工作中的最後個。 如需 7 項工作的概觀,請參閱 服務匯流排轉送訊息教學課程

此主題描述如何實作基本用戶端應用程式,以存取在此教學課程中先前建立的服務。 用戶端與服務類似,都會執行許多可存取 服務匯流排 的相同操作:

  1. 設定連線模式。

  2. 建立可找到主機服務的 URI。

  3. 定義安全性認證。

  4. 將認證套用至連線。

  5. 開啟連線。

  6. 執行應用程式特定的工作。

  7. 關閉連線。

但是,其中一個主要差異在於,用戶端應用程式使用通道來連線至 服務匯流排,服務則是使用對 ServiceHost 的呼叫。在程序後面的範例中,提供用於這些工作的程式碼。

完成時間:15 分鐘

  1. 將連線模式設定為 AutoDetect

    在用戶端應用程式的 Main() 方法內部新增下列程式碼。

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    
  2. 定義變數,以保留讀取自主控台的 服務命名空間、簽發者名稱及簽發者密碼的值。

    
    Console.Write("Your Service Namespace: ");
    string serviceNamespace = Console.ReadLine();
    Console.Write("Your Issuer Name: ");
    string issuerName = Console.ReadLine();
    Console.Write("Your Issuer Secret: ");
    string issuerSecret = Console.ReadLine();
    
    
    
  3. 建立在 服務匯流排 專案中定義主機位置的 URI。

    Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");
    
    
  4. 建立 服務命名空間 端點的認證物件。

    TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
    sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);
    
  5. 建立通道處理站,載入 App.config 檔案中所述的設定。

    ChannelFactory<IEchoChannel> channelFactory = new ChannelFactory<IEchoChannel>("RelayEndpoint", new EndpointAddress(serviceUri));
    

    通道處理站是 WCF 物件,可建立服務和用戶端應用程式用來進行通訊的通道。

  6. 套用 服務匯流排 認證。

    channelFactory.Endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    
  7. 建立和開啟服務通道。

    IEchoChannel channel = channelFactory.CreateChannel();
    channel.Open();
    
  8. 針對回應撰寫基本使用者介面與功能。

    Console.WriteLine("Enter text to echo (or [Enter] to exit):");
    string input = Console.ReadLine();
    while (input != String.Empty)
    {
        try
        {
            Console.WriteLine("Server echoed: {0}", channel.Echo(input));
        }
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.Message);
        }
        input = Console.ReadLine();
    }
    

    請注意,程式碼會使用通道物件的執行個體作為服務的 Proxy。

  9. 關閉通道,然後關閉處理站。

    channel.Close();
    channelFactory.Close();
    

  1. F6 以建立方案。

    這會建置您在本教學課程的上一個步驟中建立的用戶端專案和服務專案,並為每一個專案建立可執行檔。

  2. 執行用戶端應用程式之前,請先確定服務應用程式有在執行。

    您現在應該會有適用於「回應」服務應用程式的可執行檔 (名為 EchoService.exe),其位於您在 \bin\Debug\EchoService.exe (適用於偵錯設定) 或 \bin\Release\EchoService.exe (適用於發行設定) 上的服務專案資料夾底下。按兩下此檔案,以啟動服務應用程式。

  3. 主控台視窗即會開啟,並提示您輸入 服務命名空間。在此主控台視窗中,輸入 服務命名空間,然後按 ENTER 鍵。

  4. 接著,系統會提示您輸入簽發者名稱。輸入簽發者名稱,然後按 ENTER 鍵。

  5. 輸入簽發者名稱之後,輸入簽發者密碼,然後按 ENTER 鍵。

    此處為主控台視窗的輸出範例。請注意,此處提供的值僅供示範用途。

    您的服務命名空間:myNamespace
    您的簽發者名稱:owner
    您的簽發者密碼:1deCBMEhx/RV3bgwIhCohqdtzj/ZG2WnyC1cLhHTpk4=

    服務應用程式啟動,並將它接聽的位址列印到主控台視窗中,如下列範例所示。

    服務位址:sb://mynamespace.servicebus.windows.net/EchoService/
    按 [Enter] 鍵結束
  6. 執行用戶端應用程式。

    您現在應該會有適用於「回應」用戶端應用程式的可執行檔 (名為 EchoClient.exe),其位於您在 .\bin\Debug\EchoClient.exe (適用於偵錯設定) 或 .\bin\Release\EchoClient.exe (適用於發行設定) 上的用戶端專案目錄底下。按兩下此檔案,以啟動用戶端應用程式。

  7. 主控台視窗開啟,並提示您輸入您先前針對服務應用程式所輸入的相同資訊。遵循先前的步驟,針對用戶端應用程式輸入相同的 服務命名空間、簽發者名稱及簽發者密碼值。

  8. 輸入這些值後,用戶端即會開啟服務的通道,並提示您輸入一些文字,如下列主控台輸出範例所示。

    輸入要回應的文字 (或按 [Enter] 鍵結束):

    輸入一些要傳送至服務應用程式的文字,然後按 ENTER 鍵。

    此文字會透過 Echo 服務操作傳送至服務,並顯示於服務主控台視窗中,如下列輸出範例所示。

    回應:我的範例文字

    用戶端應用程式會收到 Echo 操作傳回的值 (此為原始文字),並將它列印到主控台視窗中。以下為用戶端主控台視窗的輸出範例。

    回應的伺服器:我的範例文字
  9. 您可以利用此方式,繼續將文字訊息從用戶端傳送至服務。完成時,在用戶端與服務主控台視窗中按 ENTER 鍵,結束這兩個應用程式。

範例

下列範例顯示如何建立用戶端應用程式、如何呼叫服務的操作,以及如何在完成操作呼叫之後關閉用戶端。

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

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 { }

    class Program
    {
        static void Main(string[] args)
        {
            ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;

            
            Console.Write("Your Service Namespace: ");
            string serviceNamespace = Console.ReadLine();
            Console.Write("Your Issuer Name: ");
            string issuerName = Console.ReadLine();
            Console.Write("Your Issuer Secret: ");
            string issuerSecret = Console.ReadLine();

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

            TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
            sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);

            ChannelFactory<IEchoChannel> channelFactory = new ChannelFactory<IEchoChannel>("RelayEndpoint", new EndpointAddress(serviceUri));

            channelFactory.Endpoint.Behaviors.Add(sharedSecretServiceBusCredential);

            IEchoChannel channel = channelFactory.CreateChannel();
            channel.Open();

            Console.WriteLine("Enter text to echo (or [Enter] to exit):");
            string input = Console.ReadLine();
            while (input != String.Empty)
            {
                try
                {
                    Console.WriteLine("Server echoed: {0}", channel.Echo(input));
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error: " + e.Message);
                }
                input = Console.ReadLine();
            }

            channel.Close();
            channelFactory.Close();

        }
    }
}

啟動用戶端之前,請先確定服務有在執行。如需詳細資訊,請參閱步驟 4:主控和執行基本 Web 服務以向服務匯流排登錄

安全性

顯示:
© 2014 Microsoft