Kurz: zpřístupnění místní služby WCF REST externímu klientovi pomocí Azure WCF RelayTutorial: Expose an on-premises WCF REST service to external client by using Azure WCF Relay

V tomto kurzu se dozvíte, jak vytvořit klientskou aplikaci WCF Relay a službu pomocí Azure Relay.This tutorial describes how to build a WCF Relay client application and service using Azure Relay. Podobný kurz, který používá Service Bus zasílání zpráv, najdete v tématu Začínáme s Service Bus fronty.For a similar tutorial that uses Service Bus messaging, see Get started with Service Bus queues.

Při práci v tomto kurzu získáte informace o postupu při vytváření WCF Relaych aplikací klienta a služby.Working through this tutorial gives you an understanding of the steps to create a WCF Relay client and service application. Stejně jako jejich původní protějšky WCF je služba konstrukce, která zveřejňuje jeden nebo více koncových bodů.Like their original WCF counterparts, a service is a construct that exposes one or more endpoints. Každý koncový bod zveřejňuje jednu nebo více operací služby.Each endpoint exposes one or more service operations. Koncový bod služby specifikuje adresu, kde se dá služba najít, vazbu, která obsahuje informaci, že klient musí komunikovat se službou, a kontrakt, který definuje funkci, kterou služba klientovi poskytuje.The endpoint of a service specifies an address where the service can be found, a binding that contains the information that a client must communicate with the service, and a contract that defines the functionality provided by the service to its clients. Hlavním rozdílem mezi WCF a WCF Relay je, že se koncový bod zveřejňuje v cloudu, ne místně na vašem počítači.The main difference between WCF and WCF Relay is that the endpoint is exposed in the cloud instead of locally on your computer.

Po absolvování posloupnosti oddílů v tomto kurzu budete mít běžící službu.After you work through the sequence of sections in this tutorial, you'll have a running service. Také budete mít klienta, který může vyvolat operace služby.You'll also have a client that can invoke the operations of the service.

V tomto kurzu provedete následující úlohy:You do the following tasks in this tutorial:

  • Nainstalovat požadavky pro tento kurz.Install prerequisites for this tutorial.
  • Vytvořte obor názvů Relay.Create a Relay namespace.
  • Vytvoření kontraktu služby WCF.Create a WCF service contract.
  • Implementujte kontrakt WCF.Implement the WCF contract.
  • Hostování a spuštění služby WCF pro registraci ve službě přenosu.Host and run the WCF service to register with the Relay service.
  • Vytvořte klienta WCF pro kontrakt služby.Create a WCF client for the service contract.
  • Nakonfigurujte klienta WCF.Configure the WCF client.
  • Implementujte klienta WCF.Implement the WCF client.
  • Spusťte aplikace.Run the applications.

PožadavkyPrerequisites

Pro absolvování tohoto kurzu musí být splněné následující požadavky:To complete this tutorial, you need the following prerequisites:

Vytvoření oboru názvů RelayCreate a Relay namespace

Prvním krokem je vytvoření oboru názvů a získání klíče sdíleného přístupového podpisu (SAS) .The first step is to create a namespace, and to obtain a Shared Access Signature (SAS) key. Obor názvů poskytuje hranici aplikace pro každou aplikaci vystavenou prostřednictvím předávací služby.A namespace provides an application boundary for each application exposed through the relay service. Klíč SAS se automaticky generuje systémem při vytvoření oboru názvů služby.An SAS key is automatically generated by the system when a service namespace is created. Kombinace oboru názvů služby a klíče SAS poskytuje přihlašovací údaje pro Azure, které ověřují přístup k aplikaci.The combination of service namespace and SAS key provides the credentials for Azure to authenticate access to an application.

  1. Přihlaste se na web Azure Portal.Sign in to the Azure portal.

  2. Vyberte vytvořit prostředek.Select Create a resource. Pak vyberte Integrace > Přenos.Then, select Integration > Relay. Pokud se v seznamu Přenos nezobrazuje, vyberte v pravém horním rohu Zobrazit vše.If you don't see Relay in the list, select See All in the top-right corner.

  3. Vyberte vytvořita do pole název zadejte název oboru názvů.Select Create, and enter a namespace name in the Name field. Azure Portal zkontroluje, jestli je název k dispozici.Azure portal checks to see if the name is available.

  4. Vyberte předplatné Azure, ve kterém chcete vytvořit obor názvů.Choose an Azure subscription in which to create the namespace.

  5. V poli Skupina prostředkůvyberte existující skupinu prostředků, do které se má obor názvů umístit, nebo vytvořte novou.For Resource group, choose an existing resource group in which to place the namespace, or create a new one.

  6. Vyberte zemi nebo oblast, ve které by měl být hostovaný obor názvů.Select the country or region in which your namespace should be hosted.

    Vytvoření oboru názvů

  7. Vyberte Vytvořit.Select Create. Azure Portal vytvoří obor názvů a povolí ho.The Azure portal creates your namespace and enables it. Po několika minutách systém zřídí prostředky pro váš účet.After a few minutes, the system provisions resources for your account.

Získání přihlašovacích údajů pro správuGet management credentials

  1. Vyberte všechny prostředkya pak zvolte nově vytvořený název oboru názvů.Select All resources, and then choose the newly created namespace name.

  2. Vyberte zásady sdíleného přístupu.Select Shared access policies.

  3. V části Zásady sdíleného přístupu vyberte RootManageSharedAccessKey.Under Shared access policies, select RootManageSharedAccessKey.

  4. V části zásada SAS: RootManageSharedAccessKeyvyberte tlačítko Kopírovat vedle primárního připojovacího řetězce.Under SAS Policy: RootManageSharedAccessKey, select the Copy button next to Primary Connection String. Tato akce zkopíruje připojovací řetězec do schránky pro pozdější použití.This action copies the connection string to your clipboard for later use. Vložte tuto hodnotu do Poznámkového bloku nebo jiného dočasného umístění.Paste this value into Notepad or some other temporary location.

  5. Zopakujte předchozí krok, zkopírujte si hodnotu primárního klíče a vložte ji do dočasného umístění pro pozdější použití.Repeat the preceding step to copy and paste the value of Primary key to a temporary location for later use.

    connection-string

Definování kontraktu služby WCFDefine a WCF service contract

Kontrakt služby určuje, které operace služba podporuje.The service contract specifies what operations the service supports. Operace jsou metody nebo funkce webové služby.Operations are web service methods or functions. Kontrakty se vytvoří definováním základního rozhraní C++, C# nebo Visual Basic.Contracts are created by defining a C++, C#, or Visual Basic interface. Každá metoda v rozhraní odpovídá konkrétní operaci služby.Each method in the interface corresponds to a specific service operation. Na každé rozhraní musí mít aplikovaný atribut ServiceContractAttribute a na každou operace musí byt aplikovaný atribut OperationContractAttribute.Each interface must have the ServiceContractAttribute attribute applied to it, and each operation must have the OperationContractAttribute attribute applied to it. Pokud metoda v rozhraní, které má atribut ServiceContractAttribute , nemá atribut OperationContractAttribute , tato metoda není vystavena.If a method in an interface that has the ServiceContractAttribute attribute doesn't have the OperationContractAttribute attribute, that method isn't exposed. Kód k těmto úlohám najdete v příkladu za postupem.The code for these tasks is provided in the example following the procedure. Větší diskuzi o smlouvách a službách najdete v tématu navrhování a implementace služeb.For a larger discussion of contracts and services, see Designing and Implementing Services.

Vytvoření kontraktu služby Relay s rozhranímCreate a relay contract with an interface

  1. Spusťte Microsoft Visual Studio jako správce.Start Microsoft Visual Studio as an administrator. Provedete to tak, že kliknete pravým tlačítkem na ikonu programu Visual Studio a vyberete Spustit jako správce.To do so, right-click the Visual Studio program icon, and select Run as administrator.

  2. V aplikaci Visual Studio vyberte možnost vytvořit nový projekt.In Visual Studio, select Create a new project.

  3. V možnosti vytvořit nový projektzvolte Konzolová aplikace (.NET Framework) pro C# a vyberte Další.In Create a new project, choose Console App (.NET Framework) for C# and select Next.

  4. Pojmenujte projekt EchoService a vyberte vytvořit.Name the project EchoService and select Create.

    Vytvoření konzolové aplikace

  5. V Průzkumník řešeníklikněte pravým tlačítkem na projekt a vyberte Spravovat balíčky NuGet.In Solution Explorer, right-click the project and select Manage NuGet Packages. V okně Správce balíčků NuGetvyberte Procházet, vyhledejte a vyberte windowsazure. ServiceBus.In the NuGet Package Manager, select Browse, then search for and choose WindowsAzure.ServiceBus. Vyberte nainstalovata přijměte podmínky použití.Select Install, and accept the terms of use.

    Balíček Service Bus

    Tento balíček automaticky přidá odkazy na knihovny Service Bus a System.ServiceModelWCF.This package automatically adds references to the Service Bus libraries and the WCF System.ServiceModel. System.ServiceModel je obor názvů, který vám umožňuje programový přístup k základním funkcím WCF.System.ServiceModel is the namespace that enables you to programmatically access the basic features of WCF. Service Bus používá mnoho objektů a atributů WCF k definování kontraktů služby.Service Bus uses many of the objects and attributes of WCF to define service contracts.

  6. Do horní části program.cspřidejte následující příkazy using:Add the following using statements at the top of Program.cs:

    using System.ServiceModel;
    using Microsoft.ServiceBus;
    
  7. Změňte název oboru názvů z výchozího názvu EchoService na Microsoft.ServiceBus.Samples.Change the namespace name from its default name of EchoService to Microsoft.ServiceBus.Samples.

    Důležité

    V tomto kurzu se C# používá obor názvů Microsoft.ServiceBus.Samples což je obor názvů spravovaného typu založeného na kontraktu, který se používá v konfiguračním souboru v části Konfigurace klienta služby WCF .This tutorial uses the C# namespace Microsoft.ServiceBus.Samples which is the namespace of the contract-based managed type that is used in the configuration file in the Configure the WCF client section. Můžete určit libovolný obor názvů, který chcete při sestavování této ukázky použít.You can specify any namespace you want when you build this sample. Tento kurz ale nebude fungovat, pokud pak v konfiguračním souboru aplikace neupravíte obory názvů kontraktu a služby odpovídajícím způsobem.However, the tutorial will not work unless you then modify the namespaces of the contract and service accordingly, in the application configuration file. Obor názvů zadaný v souboru App. config musí být stejný jako obor názvů zadaný ve vašich C# souborech.The namespace specified in the App.config file must be the same as the namespace specified in your C# files.

  8. Přímo po deklaraci oboru názvů Microsoft.ServiceBus.Samples, ale v rámci oboru názvů, definujte nové rozhraní s názvem IEchoContract a použijte atribut ServiceContractAttribute na rozhraní s hodnotou oboru názvů https://samples.microsoft.com/ServiceModel/Relay/.Directly after the Microsoft.ServiceBus.Samples namespace declaration, but within the namespace, define a new interface named IEchoContract and apply the ServiceContractAttribute attribute to the interface with a namespace value of https://samples.microsoft.com/ServiceModel/Relay/. Vložte následující kód za deklaraci oboru názvů:Paste the following code after the namespace declaration:

    [ServiceContract(Name = "IEchoContract", Namespace = "https://samples.microsoft.com/ServiceModel/Relay/")]
    public interface IEchoContract
    {
    }
    

    Hodnota oboru názvů se liší od oboru názvů, které používáte v celém svém kódu.The namespace value differs from the namespace that you use throughout the scope of your code. Místo toho se obor názvů používá jako jedinečný identifikátor pro tento kontrakt.Instead, the namespace value is used as a unique identifier for this contract. Když explicitně zadáte obor názvů, zabráníte tím přidání výchozí hodnoty oboru názvů do názvu kontraktu.Specifying the namespace explicitly prevents the default namespace value from being added to the contract name.

    Poznámka

    Obor názvů kontraktu služby obvykle obsahuje schéma pojmenování s informacemi o verzi.Typically, the service contract namespace contains a naming scheme that includes version information. Informace o verzi, které jsou v oboru názvů kontraktu služby, službám umožňuje službám izolovat výrazné změny pomocí definice nové služby s novým oborem názvů, která bude vystavená na novém koncovém bodu.Including version information in the service contract namespace enables services to isolate major changes by defining a new service contract with a new namespace and exposing it on a new endpoint. Tímto způsobem můžou klienti dál používat původní kontrakt služby, aniž by se museli aktualizovat.In this manner, clients can continue to use the old service contract without having to be updated. Informace o verzi může mít podobu data nebo čísla sestavení.Version information can consist of a date or a build number. Další informace najdete v článku o Správa verzí služeb.For more information, see Service Versioning. Pro účely tohoto kurzu schéma pojmenování oboru názvů kontraktu služby neobsahuje informace o verzi.For this tutorial, the naming scheme of the service contract namespace does not contain version information.

  9. V rozhraní IEchoContract deklarujte metodu pro jedinou operaci, kterou IEchoContract smlouva zpřístupňuje v rozhraní, a použijte atribut OperationContractAttribute pro metodu, kterou chcete zveřejnit jako součást veřejné WCF Relay kontraktu, a to takto:Within the IEchoContract interface, declare a method for the single operation the IEchoContract contract exposes in the interface and apply the OperationContractAttribute attribute to the method that you want to expose as part of the public WCF Relay contract, as follows:

    [OperationContract]
    string Echo(string text);
    
  10. Přímo po definici rozhraní IEchoContract deklarujte kanál, který zdědí vlastnosti z obou IEchoContract a také do rozhraní IClientChannel, jak je vidět tady:Directly after the IEchoContract interface definition, declare a channel that inherits from both IEchoContract and also to the IClientChannel interface, as shown here:

    public interface IEchoChannel : IEchoContract, IClientChannel { }
    

    Kanál je objekt WCF, kterým si hostitel a klient navzájem posílají informace.A channel is the WCF object through which the host and client pass information to each other. Později do kanálu napíšete kód, který bude zobrazovat informace o těchto dvou aplikacích.Later, you'll write code against the channel to echo information between the two applications.

  11. Vyberte sestavit > Sestavit řešení nebo vyberte CTRL + SHIFT + B a potvrďte přesnost své dosavadní práce.Select Build > Build Solution or select Ctrl+Shift+B to confirm the accuracy of your work so far.

Příklad smlouvy WCFExample of a WCF contract

Následující kód ukazuje základní rozhraní, které definuje kontrakt WCF Relay.The following code shows a basic interface that defines a WCF Relay contract.

using System;
using System.ServiceModel;

namespace Microsoft.ServiceBus.Samples
{
    [ServiceContract(Name = "IEchoContract", Namespace = "https://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)
        {
        }
    }
}

Když je teď vytvořené rozhraní, můžete ho implementovat.Now that the interface is created, you can implement the interface.

Implementace kontraktu WCFImplement the WCF contract

Vytvoření služby Azure Relay vyžaduje, abyste nejdřív vytvořili kontrakt pomocí rozhraní.Creating an Azure relay requires that you first create the contract by using an interface. Další informace o vytváření rozhraní najdete v předchozí části.For more information about creating the interface, see the previous section. Další postup implementuje rozhraní.The next procedure implements the interface. Tato úloha zahrnuje vytvoření třídy s názvem EchoService, která implementuje uživatelsky definované rozhraní IEchoContract.This task involves creating a class named EchoService that implements the user-defined IEchoContract interface. Po implementaci rozhraní je třeba nakonfigurovat rozhraní pomocí konfiguračního souboru App. config .After you implement the interface, you then configure the interface using an App.config configuration file. Konfigurační soubor obsahuje informace potřebné pro aplikaci.The configuration file contains necessary information for the application. Tyto informace zahrnují název služby, název kontraktu a typ protokolu, který se používá ke komunikaci se službou Relay.This information includes the name of the service, the name of the contract, and the type of protocol that is used to communicate with the relay service. Kód použitý pro tyto úlohy je k dispozici v příkladu, který následuje po tomto postupu.The code used for these tasks is provided in the example that follows the procedure. Obecnější diskuzi o implementaci kontraktu služby najdete v tématu implementace kontraktůslužeb.For a more general discussion about how to implement a service contract, see Implementing Service Contracts.

  1. Vytvořte novou třídu s názvem EchoService přímo po definování rozhraní IEchoContract.Create a new class named EchoService directly after the definition of the IEchoContract interface. Třída EchoService implementuje rozhraní IEchoContract.The EchoService class implements the IEchoContract interface.

    class EchoService : IEchoContract
    {
    }
    

    Podobně jako u implementace jiných rozhraní můžete definici implementovat v jiném souboru.Similar to other interface implementations, you can implement the definition in a different file. V tomto kurzu je ale implementace ve stejném souboru jako definice rozhraní a metoda Main().However, for this tutorial, the implementation is located in the same file as the interface definition and the Main() method.

  2. Na rozhraní IEchoContract aplikujte atribut ServiceBehaviorAttribute.Apply the ServiceBehaviorAttribute attribute to the IEchoContract interface. Atribut specifikuje název služby a obor názvů.The attribute specifies the service name and namespace. Když to dokončíte, třída EchoService bude vypadat takto:After doing so, the EchoService class appears as follows:

    [ServiceBehavior(Name = "EchoService", Namespace = "https://samples.microsoft.com/ServiceModel/Relay/")]
    class EchoService : IEchoContract
    {
    }
    
  3. Implementujte metodu Echo definovanou v rozhraní IEchoContract ve třídě EchoService.Implement the Echo method defined in the IEchoContract interface in the EchoService class.

    public string Echo(string text)
    {
        Console.WriteLine("Echoing: {0}", text);
        return text;
    }
    
  4. Vyberte sestavit > Sestavit řešení nebo vyberte CTRL + SHIFT + B.Select Build > Build Solution or select Ctrl+Shift+B.

Definujte konfiguraci pro hostitele služby.Define the configuration for the service host

Konfigurační soubor je podobný konfiguračnímu souboru WCF.The configuration file is similar to a WCF configuration file. Obsahuje název služby, koncový bod a vazbu.It includes the service name, endpoint, and binding. Koncový bod je umístění Azure Relay zveřejňuje klienty a hostitele ke vzájemné komunikaci.The endpoint is the location Azure Relay exposes for clients and hosts to communicate with each other. Vazba je typ protokolu, který se používá ke komunikaci.The binding is the type of protocol that is used to communicate. Hlavním rozdílem je, že tento nakonfigurovaný koncový bod služby odkazuje na vazbu NetTcpRelayBinding , která není součástí .NET Framework.The main difference is that this configured service endpoint refers to a NetTcpRelayBinding binding, which isn't part of the .NET Framework. NetTcpRelayBinding je jednou z vazeb definovaných službou.NetTcpRelayBinding is one of the bindings defined by the service.

  1. V Průzkumník řešenípoklikejte na App. config a otevře se soubor v editoru sady Visual Studio.In Solution Explorer, double-click App.config to open the file in the Visual Studio editor.

  2. V elementu <appSettings> nahraďte zástupné texty názvem svého oboru názvů a klíčem SAS, který jste zkopírovali v jednom z předchozích kroků.In the <appSettings> element, replace the placeholders with the name of your service namespace, and the SAS key that you copied in an earlier step.

  3. Ve značkách <system.serviceModel> přidejte element <services>.Within the <system.serviceModel> tags, add a <services> element. V jednom konfiguračním souboru můžete definovat několik aplikací Relay.You can define multiple relay applications in a single configuration file. V tomto kurzu se ale definuje jen jedna.However, this tutorial defines only one.

    <?xmlversion="1.0"encoding="utf-8"?>
    <configuration>
      <system.serviceModel>
        <services>
    
        </services>
      </system.serviceModel>
    </configuration>
    
  4. V elementu <services> přidejte element <service>, který definuje název služby.Within the <services> element, add a <service> element to define the name of the service.

    <service name="Microsoft.ServiceBus.Samples.EchoService">
    </service>
    
  5. V elementu <service> definujte umístění koncového bodu kontraktu a také vazbu koncového bodu.Within the <service> element, define the location of the endpoint contract, and also the type of binding for the endpoint.

    <endpoint contract="Microsoft.ServiceBus.Samples.IEchoContract" binding="netTcpRelayBinding"/>
    

    Koncový bod definuje, kde bude klient hledat hostitelskou aplikaci.The endpoint defines where the client will look for the host application. Později kurz používá tento krok k vytvoření identifikátoru URI, který plně zpřístupňuje hostitele prostřednictvím Azure Relay.Later, the tutorial uses this step to create a URI that fully exposes the host through Azure Relay. Vazba deklaruje, že používáme protokol TCP jako protokol pro komunikaci se službou Relay.The binding declares that we're using TCP as the protocol to communicate with the relay service.

  6. Vyberte sestavit > Sestavit řešení nebo vyberte CTRL + SHIFT + B a potvrďte přesnost své dosavadní práce.Select Build > Build Solution or select Ctrl+Shift+B to confirm the accuracy of your work so far.

Příklad implementace kontraktu službyExample of implementation of a service contract

Následující kód ukazuje implementaci kontraktu služby.The following code shows the implementation of the service contract.

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

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

Následující kód ukazuje základní formát souboru App. config přidruženého k hostiteli služby.The following code shows the basic format of the App.config file associated with the service host.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.ServiceBus.Samples.EchoService">
        <endpoint contract="Microsoft.ServiceBus.Samples.IEchoContract" binding="netTcpRelayBinding" />
      </service>
    </services>
    <extensions>
      <bindingExtensions>
        <add name="netTcpRelayBinding"
                    type="Microsoft.ServiceBus.Configuration.NetTcpRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      </bindingExtensions>
    </extensions>
  </system.serviceModel>
</configuration>

Hostování a spuštění služby WCF pro registraci u služby RelayHost and run the WCF service to register with the relay service

Tento krok popisuje, jak spustit službu Azure Relay.This step describes how to run an Azure Relay service.

Vytvoření přihlašovacích údajů pro předáváníCreate the relay credentials

  1. V Main() vytvořte dvě proměnné, do kterých se uloží obor názvů a klíč SAS načtené z okna konzoly.In Main(), create two variables in which to store the namespace and the SAS key that are read from the console window.

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

    Klíč SAS bude později použit pro přístup k projektu.The SAS key will be used later to access your project. Obor názvů se předá do CreateServiceUri jako parametr a vytvoří se URI služby.The namespace is passed as a parameter to CreateServiceUri to create a service URI.

  2. Pomocí objektu TransportClientEndpointBehavior deklarujete, že jako typ přihlašovacích údajů použijete klíč SAS.Using a TransportClientEndpointBehavior object, declare that you'll be using an SAS key as the credential type. Následující kód přidejte přímo za kód, který jste přidali v předchozím kroku.Add the following code directly after the code added in the last step.

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

Vytvoření základní adresy pro službuCreate a base address for the service

Po kódu, který jste přidali v předchozí části, vytvořte instanci Uri pro základní adresu služby.After the code you added in the previous section, create a Uri instance for the base address of the service. Toto URI specifikuje schéma Service Bus, obor názvů a cestu rozhraní služby.This URI specifies the Service Bus scheme, the namespace, and the path of the service interface.

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

Hodnota "SB" je zkratkou schématu Service Bus.The value "sb" is an abbreviation for the Service Bus scheme. Označuje, že jako protokol používáme protokol TCP.It indicates that we're using TCP as the protocol. Toto schéma bylo také dříve uvedeno v konfiguračním souboru, pokud byl NetTcpRelayBinding zadán jako vazba.This scheme was also previously indicated in the configuration file, when NetTcpRelayBinding was specified as the binding.

V tomto kurzu je URI sb://putServiceNamespaceHere.windows.net/EchoService.For this tutorial, the URI is sb://putServiceNamespaceHere.windows.net/EchoService.

Vytvoření a konfigurace hostitele službyCreate and configure the service host

  1. Pořád pracujete v Main()nastavte režim připojení na AutoDetect.Still working in Main(), set the connectivity mode to AutoDetect.

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    

    Režim připojení popisuje protokol, který služba používá ke komunikaci se službou Relay. buď HTTP, nebo TCP.The connectivity mode describes the protocol the service uses to communicate with the relay service; either HTTP or TCP. Když použijete výchozí nastavení AutoDetect, služba se pokusí připojit k Azure Relay přes protokol TCP, pokud je k dispozici, a HTTP, pokud není k dispozici protokol TCP.Using the default setting AutoDetect, the service attempts to connect to Azure Relay over TCP if it's available, and HTTP if TCP isn't available. Tento výsledek se liší od protokolu, který služba určuje pro komunikaci klientů.This result differs from the protocol the service specifies for client communication. Jeho protokol se určuje podle požité vazby.That protocol is determined by the binding used. Služba může například používat vazbu BasicHttpRelayBinding , která určuje, že jeho koncový bod komunikuje s klienty přes protokol HTTP.For example, a service can use the BasicHttpRelayBinding binding, which specifies that its endpoint communicates with clients over HTTP. Tato služba může určit ConnectivityMode.AutoDetect, aby služba komunikovala s Azure Relay přes protokol TCP.That same service could specify ConnectivityMode.AutoDetect so that the service communicates with Azure Relay over TCP.

  2. Vytvořte hostitele služby pomocí URI, které jste předtím vytvořili v této části.Create the service host, using the URI created earlier in this section.

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

    Hostitel služby je objekt WCF, který instancuje službu.The service host is the WCF object that instantiates the service. Tady předáte typ služby, kterou chcete vytvořit, EchoService typ a taky adresu, na které chcete službu zveřejnit.Here, you pass it the type of service you want to create, an EchoService type, and also to the address at which you want to expose the service.

  3. V horní části souboru program.cs přidejte odkazy na System. ServiceModel. Description a Microsoft. ServiceBus. Description.At the top of the Program.cs file, add references to System.ServiceModel.Description and Microsoft.ServiceBus.Description.

    using System.ServiceModel.Description;
    using Microsoft.ServiceBus.Description;
    
  4. Zpátky v Main() nakonfigurujte koncový bod, a povolte tak veřejný přístup.Back in Main(), configure the endpoint to enable public access.

    IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);
    

    Tento krok informuje službu Relay o tom, že se vaše aplikace dá najít veřejně, a prozkoumáním informačního kanálu Atom pro váš projekt.This step informs the relay service that your application can be found publicly by examining the Atom feed for your project. Pokud nastavíte DiscoveryType na private, může klient stále přistupovat ke službě.If you set DiscoveryType to private, a client could still access the service. Služba se ale při hledání Relayého oboru názvů nezobrazí.However, the service wouldn't appear when it searches the Relay namespace. Místo toho by klient musel předem znát cestu ke koncovému bodu.Instead, the client would have to know the endpoint path beforehand.

  5. Použijte pověření služby pro koncové body služby definované v souboru App. config :Apply the service credentials to the service endpoints defined in the App.config file:

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

    Jak bylo uvedeno dříve, mohli jste v konfiguračním souboru deklarovat několik služeb a koncových bodů.As stated previously, you could have declared multiple services and endpoints in the configuration file. Pokud byste to udělali, tento kód by prošel konfigurační soubor a vyhledal by všechny koncové body, na které by měl vaše pověření použít.If you had, this code would traverse the configuration file and search for every endpoint to which it should apply your credentials. Pro tento kurz má konfigurační soubor pouze jeden koncový bod.For this tutorial, the configuration file has only one endpoint.

Otevření hostitele službyOpen the service host

  1. Pořád v Main()přidejte následující řádek pro otevření služby.Still in Main(), add the following line to open the service.

    host.Open();
    
  2. Informujte uživatele, že zpráva běží, a vysvětlete mu, jak službu ukončit.Inform the user that the service is running, and explain how to shut down the service.

    Console.WriteLine("Service address: " + address);
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  3. Po dokončení zavřete hostitele služby.When finished, close the service host.

    host.Close();
    
  4. Vyberte CTRL + SHIFT + B a sestavte projekt.Select Ctrl+Shift+B to build the project.

Příklad, který hostuje službu v konzolové aplikaciExample that hosts a service in a console application

Váš dokončený kód služby by měl vypadat takto.Your completed service code should appear as follows. Kód zahrnuje kontrakt a implementaci služby z předchozích kroků v tomto kurzu a hostuje službu v konzolové aplikaci.The code includes the service contract and implementation from previous steps in the tutorial, and hosts the service in a console application.

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

namespace Microsoft.ServiceBus.Samples
{
    [ServiceContract(Name = "IEchoContract", Namespace = "https://samples.microsoft.com/ServiceModel/Relay/")]
    public interface IEchoContract
    {
        [OperationContract]
        String Echo(string text);
    }

    public interface IEchoChannel : IEchoContract, IClientChannel { };

    [ServiceBehavior(Name = "EchoService", Namespace = "https://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 Relay 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();
        }
    }
}

Vytvoření klienta WCF pro kontrakt službyCreate a WCF client for the service contract

Další úlohou je vytvoření klientské aplikace a definování kontraktu služby, který budete implementovat později.The next task is to create a client application and define the service contract you'll implement later. Tyto kroky se podobají postupům, které se používají k vytvoření služby: Definování kontraktu, úpravy souboru App. config , použití přihlašovacích údajů pro připojení ke službě Relay a tak dále.These steps resemble the steps used to create a service: defining a contract, editing an App.config file, using credentials to connect to the relay service, and so on. Kód použitý k těmto úlohám najdete v příkladu za postupem.The code used for these tasks is provided in the example following the procedure.

  1. Vytvořit nový projekt v aktuálním řešení sady Visual Studio pro klienta:Create a new project in the current Visual Studio solution for the client:

    1. V Průzkumník řešeníklikněte pravým tlačítkem na aktuální řešení (ne na projekt) a vyberte Přidat > Nový projekt.In Solution Explorer, right-click the current solution (not the project), and select Add > New Project.
    2. V Přidat nový projektvyberte Konzolová aplikace (.NET Framework) pro C#a vyberte Další.In Add a new project, select Console App (.NET Framework) for C#, and select Next.
    3. Název projektu EchoClient a vyberte vytvořit.Name project EchoClient and select Create.
  2. V Průzkumník řešenív projektu EchoClient poklikejte na program.cs , aby se soubor otevřel v editoru, pokud už není otevřený.In Solution Explorer, in the EchoClient project, double-click Program.cs to open the file in the editor, if it isn't already open.

  3. Změňte název oboru názvů z výchozího názvu EchoClient na Microsoft.ServiceBus.Samples.Change the namespace name from its default name of EchoClient to Microsoft.ServiceBus.Samples.

  4. Instalace balíčku Service Bus NuGet:Install the Service Bus NuGet package:

    1. V Průzkumník řešeníklikněte pravým tlačítkem na EchoClient a pak vyberte Spravovat balíčky NuGet.In Solution Explorer, right-click EchoClient and then select Manage NuGet Packages.

    2. Vyberte Procházet, vyhledejte a vyberte windowsazure. ServiceBus.Select Browse, then search for and select WindowsAzure.ServiceBus. Vyberte nainstalovata přijměte podmínky použití.Select Install, and accept the terms of use.

      Nainstalovat balíček služby Service Bus

  5. Do souboru program.cs přidejte příkaz using pro obor názvů System. ServiceModel .Add a using statement for the System.ServiceModel namespace in the Program.cs file.

    using System.ServiceModel;
    
  6. Přidejte definici kontraktu služby do oboru názvů, jak je vidět v následujícím příkladu.Add the service contract definition to the namespace, as shown in the following example. Tato definice je shodná s definicí použitou v projektu služby .This definition is identical to the definition used in the Service project. Přidejte tento kód v horní části Microsoft.ServiceBus.Samples oboru názvů.Add this code at the top of the Microsoft.ServiceBus.Samples namespace.

    [ServiceContract(Name = "IEchoContract", Namespace = "https://samples.microsoft.com/ServiceModel/Relay/")]
    public interface IEchoContract
    {
        [OperationContract]
        string Echo(string text);
    }
    
    public interface IEchoChannel : IEchoContract, IClientChannel { }
    
  7. Vyberte CTRL + SHIFT + B a sestavte klienta.Select Ctrl+Shift+B to build the client.

Příklad projektu EchoClientExample of the EchoClient project

Následující kód ukazuje aktuální stav souboru program.cs v projektu EchoClient .The following code shows the current status of the Program.cs file in the EchoClient project.

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

namespace Microsoft.ServiceBus.Samples
{

    [ServiceContract(Name = "IEchoContract", Namespace = "https://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)
        {
        }
    }
}

Konfigurace klienta WCFConfigure the WCF client

V tomto kroku vytvoříte soubor App. config pro základní klientskou aplikaci, která přistupuje ke službě vytvořené dříve v tomto kurzu.In this step, you create an App.config file for a basic client application that accesses the service created previously in this tutorial. Tento soubor App. config definuje kontrakt, vazbu a název koncového bodu.This App.config file defines the contract, binding, and name of the endpoint. Kód použitý k těmto úlohám najdete v příkladu za postupem.The code used for these tasks is provided in the example following the procedure.

  1. V Průzkumník řešenív projektu EchoClient poklikejte na App. config a otevře se soubor v editoru sady Visual Studio.In Solution Explorer, in the EchoClient project, double-click App.config to open the file in the Visual Studio editor.

  2. V elementu <appSettings> nahraďte zástupné texty názvem svého oboru názvů a klíčem SAS, který jste zkopírovali v jednom z předchozích kroků.In the <appSettings> element, replace the placeholders with the name of your service namespace, and the SAS key that you copied in an earlier step.

  3. V rámci elementu system.serviceModel přidejte prvek <client>.Within the system.serviceModel element, add a <client> element.

    <?xmlversion="1.0"encoding="utf-8"?>
    <configuration>
      <system.serviceModel>
        <client>
        </client>
      </system.serviceModel>
    </configuration>
    

    Tento kód deklaruje, že definujete klientskou aplikaci ve stylu WCF.This code declares that you're defining a WCF-style client application.

  4. V elementu client definujte název, kontrakt a typ vazby koncového bodu.Within the client element, define the name, contract, and binding type for the endpoint.

    <endpoint name="RelayEndpoint"
                    contract="Microsoft.ServiceBus.Samples.IEchoContract"
                    binding="netTcpRelayBinding"/>
    

    Tento kód definuje název koncového bodu.This code defines the name of the endpoint. Definuje také kontrakt definovaný ve službě a skutečnost, že klientská aplikace používá protokol TCP ke komunikaci s Azure Relay.It also defines the contract defined in the service and the fact that the client application uses TCP to communicate with Azure Relay. Název koncového bodu se použije v následujícím kroku k propojení této konfigurace koncového bodu s URI služby.The endpoint name is used in the next step to link this endpoint configuration with the service URI.

  5. Vyberte soubor > Uložit vše.Select File > Save All.

Příklad souboru App. configExample of the App.config file

Následující kód ukazuje soubor App. config pro klienta echo.The following code shows the App.config file for the Echo client.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <client>
      <endpoint name="RelayEndpoint"
                      contract="Microsoft.ServiceBus.Samples.IEchoContract"
                      binding="netTcpRelayBinding"/>
    </client>
    <extensions>
      <bindingExtensions>
        <add name="netTcpRelayBinding"
                    type="Microsoft.ServiceBus.Configuration.NetTcpRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      </bindingExtensions>
    </extensions>
  </system.serviceModel>
</configuration>

Implementace klienta WCFImplement the WCF client

V této části implementujete základní klientskou aplikaci, která přistupuje ke službě, kterou jste vytvořili dříve v tomto kurzu.In this section, you implement a basic client application that accesses the service you created previously in this tutorial. Podobně jako u služby má klient mnoho stejných operací pro přístup k Azure Relay:Similar to the service, the client does many of the same operations to access Azure Relay:

  • Nastaví režim připojení.Sets the connectivity mode.
  • Vytvoří URI, které vyhledá hostitelskou službu.Creates the URI that locates the host service.
  • Definuje bezpečnostní pověření.Defines the security credentials.
  • Aplikuje pověření na připojení.Applies the credentials to the connection.
  • Otevře připojení.Opens the connection.
  • Provádí úlohy specifické pro aplikace.Performs the application-specific tasks.
  • Ukončí připojení.Closes the connection.

Jedním z hlavních rozdílů však je, že klientská aplikace používá pro připojení ke službě Relay kanál.However, one of the main differences is that the client application uses a channel to connect to the relay service. Služba používá volání třídy ServiceHost.The service uses a call to ServiceHost. Kód použitý k těmto úlohám najdete v příkladu za postupem.The code used for these tasks is provided in the example following the procedure.

Implementace klientské aplikaceImplement a client application

  1. Nastavte režim připojení na AutoDetect.Set the connectivity mode to AutoDetect. Do metody Main() aplikace EchoClient přidejte následující kód.Add the following code inside the Main() method of the EchoClient application.

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    
  2. Definujte proměnné, do kterých se uloží hodnoty obor názvů služby a klíče SAS načtené z konzoly.Define variables to hold the values for the service namespace, and SAS key that are read from the console.

    Console.Write("Your Service Namespace: ");
    string serviceNamespace = Console.ReadLine();
    Console.Write("Your SAS Key: ");
    string sasKey = Console.ReadLine();
    
  3. Vytvořte identifikátor URI, který definuje umístění hostitele ve vašem projektu Relay.Create the URI that defines the location of the host in your Relay project.

    Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");
    
  4. Vytvořte objekt pověření pro koncový bod vašeho oboru názvů.Create the credential object for your service namespace endpoint.

    TransportClientEndpointBehavior sasCredential = new TransportClientEndpointBehavior();
    sasCredential.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", sasKey);
    
  5. Vytvořte objekt pro vytváření kanálů, který načte konfiguraci popsanou v souboru App. config .Create the channel factory that loads the configuration described in the App.config file.

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

    Objekt kanálu pro vytváření je objekt WCF, který vytvoří kanál, přes který může služba komunikovat s klientskými aplikacemi.A channel factory is a WCF object that creates a channel through which the service and client applications communicate.

  6. Použijte přihlašovací údaje.Apply the credentials.

    channelFactory.Endpoint.Behaviors.Add(sasCredential);
    
  7. Vytvořte a otevřete kanál pro službu.Create and open the channel to the service.

    IEchoChannel channel = channelFactory.CreateChannel();
    channel.Open();
    
  8. Napište základní uživatelské prostředí a funkci pro echo.Write the basic user interface and functionality for the echo.

    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();
    }
    

    Kód používá instanci objektu kanálu jako proxy pro službu.The code uses the instance of the channel object as a proxy for the service.

  9. Zavřete kanál a zavřete objekt pro vytváření.Close the channel, and close the factory.

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

Ukázkový kód pro tento kurzExample code for this tutorial

Váš dokončený kód by měl vypadat takto.Your completed code should appear as follows. Tento kód ukazuje, jak vytvořit klientskou aplikaci, jak volat operace služby a jak zavřít klienta po dokončení volání operace.This code shows how to create a client application, how to call the operations of the service, and how to close the client after the operation call is finished.

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

namespace Microsoft.ServiceBus.Samples
{
    [ServiceContract(Name = "IEchoContract", Namespace = "https://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 SAS Key: ");
            string sasKey = Console.ReadLine();



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

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

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

            channelFactory.Endpoint.Behaviors.Add(sasCredential);

            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();

        }
    }
}

Spuštění aplikacíRun the applications

  1. Vyberte CTRL + SHIFT + B a sestavte řešení.Select Ctrl+Shift+B to build the solution. Tato akce vytvoří projekt klienta i projekt služby, který jste vytvořili v předchozích krocích.This action builds both the client project and the service project that you created in the previous steps.

  2. Než spustíte klientskou aplikaci, musíte se ujistit, že aplikace služby běží.Before running the client application, you must make sure that the service application is running. V Průzkumník řešeníklikněte pravým tlačítkem na řešení EchoService a pak vyberte vlastnosti.In Solution Explorer, right-click the EchoService solution, then select Properties.

  3. Na stránce vlastností, běžné vlastnosti > spouštěný projekt, a pak zvolte více projektů po spuštění.In Property Pages, Common Properties > Startup Project, then choose Multiple startup projects. Ujistěte se, že se EchoService v seznamu objeví jako první.Make sure EchoService appears first in the list.

  4. V poli Akce u projektů EchoService i EchoClient nastavte Start.Set the Action box for both the EchoService and EchoClient projects to Start.

    Stránky vlastností projektu

  5. Vyberte závislosti projektu.Select Project Dependencies. V projektechvyberte EchoClient.In Projects, select EchoClient. Pro závisí na, ujistěte se, že je vybraná možnost EchoService .For Depends on, make sure EchoService is selected.

    Závislosti projektu

  6. Kliknutím na tlačítko OK zavřete stránku vlastností.Select OK to close Property Pages.

  7. Vyberte F5 pro spuštění obou projektů.Select F5 to run both projects.

  8. Obě okna konzoly se otevřou a požádají vás o zadání oboru názvů.Both console windows open and prompt you for the namespace name. Služba musí být nejprve spuštěna, takže v okně konzoly EchoService zadejte obor názvů a potom vyberte Enter.The service must run first, so in the EchoService console window, enter the namespace and then select Enter.

  9. V dalším kroku se v konzole zobrazí výzva k zadání klíče SAS.Next, the console prompts you for your SAS key. Zadejte klíč SAS a vyberte Enter.Enter the SAS key and select Enter.

    Tady je příklad výstupu z okna konzoly.Here is example output from the console window. Zde jsou uvedené hodnoty jenom příklady.The values here are just examples.

    Your Service Namespace: myNamespace

    Your SAS Key: <SAS key value>

    Aplikace služby do okna konzoly vypíše adresu, na které naslouchá, jak je vidět na následujícím příkladu.The service application prints to the console window the address on which it's listening, as seen in the following example.

    Service address: sb://mynamespace.servicebus.windows.net/EchoService/

    Press [Enter] to exit

  10. V okně konzoly EchoClient zadejte stejný údaj, který jste zadali pro aplikaci služby.In the EchoClient console window, enter the same information that you entered previously for the service application. Zadejte stejný obor názvů služby a hodnoty klíče SAS pro klientskou aplikaci.Enter the same service namespace and SAS key values for the client application.

  11. Po zadání těchto hodnot klient otevře kanál ke službě a zobrazí se výzva k zadání nějakého textu, jak je vidět v následujícím příkladu výstupu konzoly.After entering these values, the client opens a channel to the service and prompts you to enter some text as seen in the following console output example.

    Enter text to echo (or [Enter] to exit):

    Zadejte nějaký text, který se odešle do aplikace služby, a vyberte Enter.Enter some text to send to the service application and select Enter. Tento text se odešle do služby pomocí operace služby Echo a objeví se v okně konzoly služby, jak je vidět v následujícím příkladu výstupu.This text is sent to the service through the Echo service operation and appears in the service console window as in the following example output.

    Echoing: My sample text

    Klientská aplikace obdrží hodnotu vrácenou z operace Echo. Tou je původní text, který se vypíše do okna konzoly.The client application receives the return value of the Echo operation, which is the original text, and prints it to its console window. Následující text je ukázkový výstup z okna konzoly klienta.The following text is example output from the client console window.

    Server echoed: My sample text

  12. Tímto způsobem můžete dál posílat textové zprávy z klienta do služby.You can continue sending text messages from the client to the service in this manner. Až budete hotovi, vyberte zadat v oknech klient a služba pro ukončení obou aplikací.When you're finished, select Enter in the client and service console windows to end both applications.

Další krokyNext steps

Přejděte k následujícímu kurzu:Advance to the following tutorial: