Öğretici: Azure WCF Geçişi REST öğreticisi

Bu öğreticide REST tabanlı bir arabirimi kullanıma sunan bir Azure Relay konak uygulamasının nasıl derlenmesi anlatılmaktadır. REST, HTTP istekleri üzerinden Service Bus API'lerine erişmek için web tarayıcısı gibi bir web istemcisi sunar.

Öğretici, Azure Relay'de bir REST hizmeti oluşturmak için Windows Communication Foundation (WCF) REST programlama modelini kullanır. Daha fazla bilgi için bkz . WCF REST Programlama Modeli ve Hizmetleri Tasarlama ve Uygulama.

Bu öğreticide aşağıdaki görevleri yerine getirin:

  • Bu öğretici için önkoşulları yükleyin.
  • Geçiş ad alanı oluşturun.
  • REST tabanlı bir WCF hizmet sözleşmesi tanımlayın.
  • REST tabanlı WCF sözleşmesini uygulayın.
  • REST tabanlı WCF hizmetini barındırın ve çalıştırın.
  • Hizmeti çalıştırın ve test edin.

Önkoşullar

Bu öğreticiyi tamamlamak için aşağıdaki önkoşulları karşılamanız gerekir:

Geçiş ad alanı oluşturma

Azure'da geçiş özelliklerini kullanmaya başlamak için öncelikle bir hizmet ad alanı oluşturmanız gerekir. Ad alanı, uygulamanızda bulunan Azure kaynaklarını adreslemek için içeriğin kapsamını belirleyen bir kapsayıcı sunar. Buradaki yönergeleri izleyerek bir Geçiş ad alanı oluşturun.

Azure Relay ile kullanılacak REST tabanlı wcf hizmet sözleşmesi tanımlama

WCF REST stilinde bir hizmet oluşturduğunuzda, sözleşmeyi tanımlamanız gerekir. Sözleşmede ana bilgisayarın hangi işlemleri desteklediği belirtilir. Hizmet işlemi bir web hizmeti yöntemine benzer. C++, C# veya Visual Basic arabirimiyle bir sözleşme tanımlayın. Arabirimdeki her yöntem belirli bir hizmet işlemine karşılık gelir. Her arabirime ServiceContractAttribute özniteliğini ve her işleme OperationContractAttribute özniteliğini uygulayın.

İpucu

ServiceContractAttribute içeren bir arabirimdeki bir yöntem OperationContractAttribute'a sahip değilse, bu yöntem kullanıma sunulmaz. Bu görevler için kullanılan kod, yordamın sonraki örneğinde gösterilir.

WCF sözleşmesi ile REST stili sözleşme arasındaki birincil fark , OperationContractAttribute: WebGetAttribute'a özellik eklenmesidir. Bu özellik sayesinde arabiriminizdeki bir yöntem ile arabirimin diğer tarafındaki bir yöntemi eşleyebilirsiniz. Bu örnekte, bir yöntemi HTTP GETile bağlamak için WebGetAttribute özniteliği kullanılır. Bu yaklaşım, Service Bus'ın arabirime gönderilen komutları doğru bir şekilde almasını ve yorumlamasını sağlar.

Arabirimle sözleşme oluşturmak için

  1. Microsoft Visual Studio'yu yönetici olarak başlatın. Bunu yapmak için Visual Studio program simgesine sağ tıklayın ve Yönetici olarak çalıştır'ı seçin.

  2. Visual Studio'da Yeni proje oluştur'u seçin.

  3. Yeni proje oluştur bölümünde C# için Konsol Uygulaması (.NET Framework) seçeneğini belirleyin ve İleri'yi seçin.

  4. Projeyi ImageListener olarak adlandırın. Varsayılan Konum'u kullanın ve oluştur'u seçin.

    C# projesi için Visual Studio bir Program.cs dosyası oluşturur. Bu sınıf, bir konsol uygulaması projesinin doğru şekilde derlenmesi için gerekli olan boş Main() yöntemi içerir.

  5. Çözüm Gezgini'daImageListener projesine sağ tıklayıp NuGet Paketlerini Yönet'i seçin.

  6. Gözat'ı seçin, ardından WindowsAzure.ServiceBus araması yapın ve seçin. Yükle'yi seçin ve kullanım koşullarını kabul edin.

    Bu adım Service Bus ve System.ServiceModel.dllbaşvurularını ekler. Bu paket Service Bus kitaplıklarına ve WCF'ye System.ServiceModelotomatik olarak başvuru ekler.

  7. Projeye açıkça bir başvuru System.ServiceModel.Web.dll ekleyin. Çözüm Gezgini'da proje klasörünün altındaki Başvurular'a sağ tıklayın ve Başvuru Ekle'yi seçin.

  8. Başvuru Ekle bölümünde Çerçeve'yi seçin ve Arama'yaSystem.ServiceModel.Web yazın. System.ServiceModel.Web onay kutusunu ve ardından Tamam'ı seçin.

Ardından, projede aşağıdaki kod değişikliklerini yapın:

  1. using Aşağıdaki deyimleri Program.cs dosyasının en üstüne ekleyin.

    using System.ServiceModel;
    using System.ServiceModel.Channels;
    using System.ServiceModel.Web;
    using System.IO;
    
    • System.ServiceModel, WCF'nin temel özelliklerine programlama erişimi sağlayan ad alanıdır. WCF Geçişi, hizmet sözleşmelerini tanımlamak için WCF'nin birçok nesnesini ve özniteliğini kullanır. Geçiş uygulamalarınızın çoğunda bu ad alanını kullanırsınız.
    • System.ServiceModel.Channels , Azure Relay ve istemci web tarayıcısı ile iletişim kurabileceğiniz nesne olan kanalı tanımlamaya yardımcı olur.
    • System.ServiceModel.Web , web tabanlı uygulamalar oluşturmanıza olanak tanıyan türleri içerir.
  2. Ad alanını ImageListener olarak Microsoft.ServiceBus.Samplesyeniden adlandırın.

    namespace Microsoft.ServiceBus.Samples
    {
        ...
    
  3. Ad alanı bildiriminin küme ayracı açıldıktan hemen sonra adlı IImageContract yeni bir arabirim tanımlayın ve özniteliğini değerine https://samples.microsoft.com/ServiceModel/Relay/RESTTutorial1sahip arabirime uygulayınServiceContractAttribute.

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

    Kodunuzun kapsamında kullandığınız ad alanı ile ad alanı değeri farklılık gösterir. Ad alanı değeri bu sözleşme için benzersiz bir tanımlayıcıdır ve sürüm bilgilerine sahip olmalıdır. Daha fazla bilgi için bkz. Hizmet Sürümü Oluşturma. Ad alanını açıkça belirlemek, varsayılan ad alanı değerinin sözleşme adına eklenmesini engeller.

  4. arabiriminde IImageContract , sözleşmenin arabirimde kullanıma sunacağı IImageContract tek işlem için bir yöntem bildirin ve özniteliğini public Service Bus sözleşmesinin bir parçası olarak kullanıma açmak istediğiniz yönteme uygulayın OperationContract .

    public interface IImageContract
    {
        [OperationContract]
        Stream GetImage();
    }
    
  5. özniteliğine OperationContract değerini ekleyin WebGet .

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

    değerinin WebGet eklenmesi, geçiş hizmetinin HTTP GET isteklerini öğesine yönlendirmesini GetImageve dönüş değerlerini bir HTTP GETRESPONSE yanıta çevirmesini GetImage sağlar. Öğreticinin ilerleyen bölümlerinde bu yönteme erişmek ve görüntüyü tarayıcıda görüntülemek için bir web tarayıcısı kullanacaksınız.

  6. IImageContract tanımından hemen sonra, IImageContract ve IClientChannel arabirimlerinden devralma işlemini gerçekleştiren bir kanal bildirin.

    public interface IImageChannel : IImageContract, IClientChannel { }
    

    Kanal, hizmet ve istemcilerin bilgileri birbirlerine göndermek için kullandıkları WCF nesnesidir. Daha sonra, kanalı konak uygulamanızda oluşturursunuz. Daha sonra Azure Relay, tarayıcıdan uygulamanıza GetImage HTTP GET isteklerini geçirmek için bu kanalı kullanır. Geçiş ayrıca dönüş değerini almak GetImage ve istemci tarayıcısı için bir'e HTTP GETRESPONSE çevirmek için kanalı kullanır.

  7. Şimdiye kadarki çalışmanızın doğruluğunu onaylamak içinDerleme ÇözümüDerle'yi> seçin.

WCF Geçişi sözleşmesi tanımlayan örnek

Aşağıdaki kod, WCF Geçişi sözleşmesini tanımlayan temel bir arabirimi gösterir.

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 = "https://samples.microsoft.com/ServiceModel/Relay/")]
    public interface IImageContract
    {
        [OperationContract, WebGet]
        Stream GetImage();
    }

    public interface IImageChannel : IImageContract, IClientChannel { }

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

REST tabanlı WCF hizmet sözleşmesini uygulama

REST stili bir WCF Geçişi hizmeti oluşturmak için önce arabirimini kullanarak sözleşmeyi oluşturun. Bir sonraki adım ise bu arabirimi uygulamaktır. Bu yordam, kullanıcı tanımlı IImageContract arabirimi uygulayan adlı ImageService bir sınıf oluşturmayı içerir. Sözleşmeyi uyguladıktan sonra arabirimini birApp.config dosyası kullanarak yapılandırabilirsiniz. Yapılandırma dosyası uygulama için gerekli bilgileri içerir. Bu bilgiler hizmetin adını, sözleşmenin adını ve geçiş hizmetiyle iletişim kurmak için kullanılan protokol türünü içerir. Bu görevler için kullanılan kod, yordamın sonraki örneğinde gösterilir.

Önceki adımlarda olduğu gibi REST stili bir sözleşme ve WCF Geçişi sözleşmesi uygulamak arasında çok az fark vardır.

REST stilinde Service Bus sözleşmesini uygulama

  1. IImageContract arabiriminin tanımından hemen sonra ImageService adlı yeni bir sınıf oluşturun. ImageService sınıfı, IImageContract arabirimini uygular.

    class ImageService : IImageContract
    {
    }
    

    Diğer arabirim uygulamalarına benzer şekilde, tanımı farklı bir dosyada uygulayabilirsiniz. Ancak bu öğreticide uygulama, arabirim tanımı ve Main() yöntemiyle aynı dosyada görünmelidir.

  2. Sınıfın bir WCF sözleşmesinin uygulaması olduğunu belirtmek için sınıfına ServiceBehaviorAttribute özniteliğini IImageService uygulayın.

    [ServiceBehavior(Name = "ImageService", Namespace = "https://samples.microsoft.com/ServiceModel/Relay/")]
    class ImageService : IImageContract
    {
    }
    

    Daha önce belirtildiği gibi, bu ad alanı geleneksel bir ad alanı değildir. Sözleşmeyi tanımlayan WCF mimarisinin bir parçasıdır. Daha fazla bilgi için bkz. Veri Sözleşmesi Adları.

  3. Projenize bir.jpg görüntüsü ekleyin. Bu dosya, hizmetin alıcı tarayıcıda görüntülediği bir resimdir.

    1. Projenize sağ tıklayın ve Ekle'yi seçin.
    2. Ardından Mevcut Öğe'yi seçin.
    3. Uygun bir .jpg göz atmak için Varolan Öğe Ekle'yi kullanın ve ekle'yi seçin. Dosyayı eklerken, Dosya adı'nın yanındaki açılan listeden Tüm Dosyalar'ı seçin.

    Bu öğreticinin geri kalanında görüntünün adının image.jpgolduğu varsayılır. Farklı bir dosyanız varsa, görüntüyü yeniden adlandırmanız veya telafi etmek için kodunuzu değiştirmeniz gerekir.

  4. Çalışan hizmetin görüntü dosyasını bulabildiğinden emin olmak için, Çözüm Gezgini görüntü dosyasına sağ tıklayın ve özellikler'i seçin. Özellikler'de, Daha yeniyse Çıkış DizinineKopyala'yı Kopyala olarak ayarlayın.

  5. Projeye System.Drawing.dll derlemesine başvuru eklemek üzere arabirimle sözleşme oluşturmak için içindeki yordamı kullanın.

  6. Aşağıdaki ilişkili using deyimleri ekleyin:

    using System.Drawing;
    using System.Drawing.Imaging;
    using Microsoft.ServiceBus;
    using Microsoft.ServiceBus.Web;
    
  7. ImageService sınıfında bit eşlemi yükleyen ve istemci tarayıcısına göndermeye hazırlayan aşağıdaki oluşturucuyu ekleyin:

    class ImageService : IImageContract
    {
        const string imageFileName = "image.jpg";
    
        Image bitmap;
    
        public ImageService()
        {
            this.bitmap = Image.FromFile(imageFileName);
        }
    }
    
  8. Önceki koddan hemen sonra, görüntüyü içeren bir HTTP iletisi döndürmek için sınıfına aşağıdaki GetImage yöntemi ImageService ekleyin.

    public Stream GetImage()
    {
        MemoryStream stream = new MemoryStream();
        this.bitmap.Save(stream, ImageFormat.Jpeg);
    
        stream.Position = 0;
        WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";
    
        return stream;
    }
    

    Bu uygulama, görüntüyü almak ve tarayıcıya akışa hazırlamak için kullanır MemoryStream . Akış konumunu sıfırdan başlatır, akış içeriğini .jpgolarak bildirir ve bilgileri akışa alır.

  9. Derleme ÇözümüOluştur'a> tıklayın.

Service Bus üzerinde web hizmetini çalıştırmak için yapılandırma tanımlama

  1. Çözüm Gezgini'daApp.config çift tıklayarak dosyayı Visual Studio düzenleyicisinde açın.

    App.config dosyası hizmet adını, uç noktayı ve bağlamayı içerir. Uç nokta, Azure Relay'in istemcilerin ve konakların birbirleriyle iletişim kurması için kullanıma açtığı konumdur. Bağlama, iletişim kurmak için kullanılan protokol türüdür. Buradaki temel fark, yapılandırılan hizmet uç noktasının bir WebHttpRelayBinding bağlamasına başvuruyor olmasıdır.

  2. <system.serviceModel> XML öğesi, bir veya birden çok hizmeti tanımlayan WCF öğesidir. Burada hizmet adını ve uç noktasını tanımlamak için kullanılır. öğesinin <system.serviceModel> en altına, ancak yine içinde <system.serviceModel>aşağıdaki içeriğe sahip bir <bindings> öğe ekleyin:

    <bindings>
        <!-- Application Binding -->
        <webHttpRelayBinding>
            <binding name="default">
                <security relayClientAuthenticationType="None" />
            </binding>
        </webHttpRelayBinding>
    </bindings>
    

    Bu içerik, uygulamada kullanılan bağlamaları tanımlar. Birden çok bağlama tanımlayabilirsiniz, ancak bu öğretici için yalnızca bir bağlama tanımlarsınız.

    Önceki kod, olarak ayarlanmış bir WCF Geçişi WebHttpRelayBinding bağlaması relayClientAuthenticationTypeNonetanımlar. Bu ayar, bu bağlamayı kullanan bir uç noktanın istemci kimlik bilgisi gerektirmediğini gösterir.

  3. <bindings> öğesinden sonra <services> öğesini ekleyin. Bağlamalara benzer şekilde tek bir yapılandırma dosyasında birden çok hizmet tanımlayabilirsiniz. Ancak bu öğreticide yalnızca bir tane tanımlayacaksınız.

    <services>
        <!-- Application Service -->
        <service name="Microsoft.ServiceBus.Samples.ImageService"
             behaviorConfiguration="default">
            <endpoint name="RelayEndpoint"
                    contract="Microsoft.ServiceBus.Samples.IImageContract"
                    binding="webHttpRelayBinding"
                    bindingConfiguration="default"
                    behaviorConfiguration="sbTokenProvider"
                    address="" />
        </service>
    </services>
    

    Bu içerik, önceden tanımlanmış varsayılan webHttpRelayBindingöğesini kullanan bir hizmeti yapılandırıyor. Ayrıca, bir sonraki adımda tanımlanan varsayılan sbTokenProvideröğesini kullanır.

  4. öğesinden <services> sonra, öğesini Paylaşılan Erişim İmzası (SAS) anahtarıyla değiştirerek SAS_KEY aşağıdaki içeriğe sahip bir <behaviors> öğe oluşturun. Azure portal bir SAS anahtarı almak için bkz. Yönetim kimlik bilgilerini alma.

    <behaviors>
        <endpointBehaviors>
            <behavior name="sbTokenProvider">
                <transportClientEndpointBehavior>
                    <tokenProvider>
                        <sharedAccessSignature keyName="RootManageSharedAccessKey" key="YOUR_SAS_KEY" />
                    </tokenProvider>
                </transportClientEndpointBehavior>
            </behavior>
            </endpointBehaviors>
            <serviceBehaviors>
                <behavior name="default">
                    <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false" />
                </behavior>
            </serviceBehaviors>
    </behaviors>
    
  5. Hala App.configöğesinde <appSettings> , bağlantı dizesi değerinin tamamını portaldan daha önce aldığınız bağlantı dizesiyle değiştirin.

    <appSettings>
       <!-- Service Bus specific app settings for messaging connections -->
       <add key="Microsoft.ServiceBus.ConnectionString"
           value="Endpoint=sb://yourNamespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=YOUR_SAS_KEY"/>
    </appSettings>
    
  6. Çözümün> tamamını oluşturmak içinDerleme Çözümü'ne tıklayın.

REST tabanlı WCF hizmet sözleşmesini uygulayan örnek

Aşağıdaki kod, bağlamayı kullanarak WebHttpRelayBinding Service Bus üzerinde çalışan REST tabanlı bir hizmet için sözleşme ve hizmet uygulamasını gösterir.

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;
using System.Drawing;
using System.Drawing.Imaging;
using Microsoft.ServiceBus;
using Microsoft.ServiceBus.Web;

namespace Microsoft.ServiceBus.Samples
{


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

    public interface IImageChannel : IImageContract, IClientChannel { }

    [ServiceBehavior(Name = "ImageService", Namespace = "https://samples.microsoft.com/ServiceModel/Relay/")]
    class ImageService : IImageContract
    {
        const string imageFileName = "image.jpg";

        Image bitmap;

        public ImageService()
        {
            this.bitmap = Image.FromFile(imageFileName);
        }

        public Stream GetImage()
        {
            MemoryStream stream = new MemoryStream();
            this.bitmap.Save(stream, ImageFormat.Jpeg);

            stream.Position = 0;
            WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";

            return stream;
        }
    }

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

Aşağıdaki örnekte, hizmetle ilişkili App.config dosyası gösterilmektedir.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
    </startup>
    <system.serviceModel>
        <extensions>
            <!-- In this extension section we are introducing all known service bus extensions. User can remove the ones they don't need. -->
            <behaviorExtensions>
                <add name="connectionStatusBehavior"
                    type="Microsoft.ServiceBus.Configuration.ConnectionStatusElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="transportClientEndpointBehavior"
                    type="Microsoft.ServiceBus.Configuration.TransportClientEndpointBehaviorElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="serviceRegistrySettings"
                    type="Microsoft.ServiceBus.Configuration.ServiceRegistrySettingsElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            </behaviorExtensions>
            <bindingElementExtensions>
                <add name="netMessagingTransport"
                    type="Microsoft.ServiceBus.Messaging.Configuration.NetMessagingTransportExtensionElement, Microsoft.ServiceBus,  Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="tcpRelayTransport"
                    type="Microsoft.ServiceBus.Configuration.TcpRelayTransportElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="httpRelayTransport"
                    type="Microsoft.ServiceBus.Configuration.HttpRelayTransportElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="httpsRelayTransport"
                    type="Microsoft.ServiceBus.Configuration.HttpsRelayTransportElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="onewayRelayTransport"
                    type="Microsoft.ServiceBus.Configuration.RelayedOnewayTransportElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            </bindingElementExtensions>
            <bindingExtensions>
                <add name="basicHttpRelayBinding"
                    type="Microsoft.ServiceBus.Configuration.BasicHttpRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="webHttpRelayBinding"
                    type="Microsoft.ServiceBus.Configuration.WebHttpRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="ws2007HttpRelayBinding"
                    type="Microsoft.ServiceBus.Configuration.WS2007HttpRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="netTcpRelayBinding"
                    type="Microsoft.ServiceBus.Configuration.NetTcpRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="netOnewayRelayBinding"
                    type="Microsoft.ServiceBus.Configuration.NetOnewayRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="netEventRelayBinding"
                    type="Microsoft.ServiceBus.Configuration.NetEventRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="netMessagingBinding"
                    type="Microsoft.ServiceBus.Messaging.Configuration.NetMessagingBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            </bindingExtensions>
        </extensions>
      <bindings>
        <!-- Application Binding -->
        <webHttpRelayBinding>
          <binding name="default">
            <security relayClientAuthenticationType="None" />
          </binding>
        </webHttpRelayBinding>
      </bindings>
      <services>
        <!-- Application Service -->
        <service name="Microsoft.ServiceBus.Samples.ImageService"
             behaviorConfiguration="default">
          <endpoint name="RelayEndpoint"
                  contract="Microsoft.ServiceBus.Samples.IImageContract"
                  binding="webHttpRelayBinding"
                  bindingConfiguration="default"
                  behaviorConfiguration="sbTokenProvider"
                  address="" />
        </service>
      </services>
      <behaviors>
        <endpointBehaviors>
          <behavior name="sbTokenProvider">
            <transportClientEndpointBehavior>
              <tokenProvider>
                <sharedAccessSignature keyName="RootManageSharedAccessKey" key="YOUR_SAS_KEY" />
              </tokenProvider>
            </transportClientEndpointBehavior>
          </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
          <behavior name="default">
            <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false" />
          </behavior>
        </serviceBehaviors>
      </behaviors>
    </system.serviceModel>
    <appSettings>
        <!-- Service Bus specific app settings for messaging connections -->
        <add key="Microsoft.ServiceBus.ConnectionString"
            value="Endpoint=sb://yourNamespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=YOUR_SAS_KEY>"/>
    </appSettings>
</configuration>

Azure Relay'i kullanmak için REST tabanlı WCF hizmetini barındırma

Bu bölümde, WCF Geçişi ile konsol uygulaması kullanarak bir web hizmetinin nasıl çalıştırıldığı açıklanmaktadır. Bu bölümde yazılan kodun tam listesi, yordamı izleyen örnekte gösterilir.

Hizmet için taban adresi oluşturma

  1. İşlev bildiriminde Main() , projenizin ad alanını depolamak için bir değişken oluşturun. değerini daha önce oluşturduğunuz Relay ad alanının adıyla değiştirdiğinizden yourNamespace emin olun.

    string serviceNamespace = "yourNamespace";
    

    Service Bus, benzersiz bir URI oluşturmak için ad alanınızdaki adı kullanır.

  2. Ad alanını temel alan hizmetin taban adresine yönelik Uri örneğini oluşturun.

    Uri address = ServiceBusEnvironment.CreateServiceUri("https", serviceNamespace, "Image");
    

Web hizmeti ana bilgisayarını oluşturma ve yapılandırma

yine içinde Main(), bu bölümde daha önce oluşturulan URI adresini kullanarak web hizmeti ana bilgisayarını oluşturun.

WebServiceHost host = new WebServiceHost(typeof(ImageService), address);

Hizmet ana bilgisayarı, ana bilgisayar uygulamasının örneğini oluşturan WCF nesnesidir. Bu örnek, ImageServiceoluşturmak istediğiniz konağın türünü (bir ) ve konak uygulamasını kullanıma açmak istediğiniz adresi geçirir.

Web hizmeti ana bilgisayarını çalıştırma

  1. hala içinde Main(), hizmeti açmak için aşağıdaki satırı ekleyin.

    host.Open();
    

    Hizmet artık çalışır durumdadır.

  2. Hizmetin çalıştığını ve nasıl durdurulacağını belirten bir ileti görüntüleyin.

    Console.WriteLine("Copy the following address into a browser to see the image: ");
    Console.WriteLine(address + "GetImage");
    Console.WriteLine();
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  3. Bu işlemi bitirdiğinizde, hizmet ana bilgisayarını kapatın.

    host.Close();
    

Hizmet sözleşmesi ve uygulama örneği

Aşağıdaki örnek, hizmet sözleşmesini ve bu öğreticinin önceki kısımlarında yer alan uygulamayı içerir ve hizmeti bir konsol uygulamasında barındırır. Aşağıdaki kodu ImageListener.exeadlı bir yürütülebilir dosyaya derleyin.

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;
using System.Drawing;
using System.Drawing.Imaging;
using Microsoft.ServiceBus;
using Microsoft.ServiceBus.Web;

namespace Microsoft.ServiceBus.Samples
{

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

    public interface IImageChannel : IImageContract, IClientChannel { }

    [ServiceBehavior(Name = "ImageService", Namespace = "https://samples.microsoft.com/ServiceModel/Relay/")]
    class ImageService : IImageContract
    {
        const string imageFileName = "image.jpg";

        Image bitmap;

        public ImageService()
        {
            this.bitmap = Image.FromFile(imageFileName);
        }

        public Stream GetImage()
        {
            MemoryStream stream = new MemoryStream();
            this.bitmap.Save(stream, ImageFormat.Jpeg);

            stream.Position = 0;
            WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";

            return stream;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            string serviceNamespace = "InsertServiceNamespaceHere";
            Uri address = ServiceBusEnvironment.CreateServiceUri("https", serviceNamespace, "Image");

            WebServiceHost host = new WebServiceHost(typeof(ImageService), address);
            host.Open();

            Console.WriteLine("Copy the following address into a browser to see the image: ");
            Console.WriteLine(address + "GetImage");
            Console.WriteLine();
            Console.WriteLine("Press [Enter] to exit");
            Console.ReadLine();

            host.Close();
        }
    }
}

Hizmeti çalıştırma ve test etme

Çözümü derledikten sonra uygulamayı çalıştırmak için şunları yapın:

  1. F5'i seçin veya hizmeti çalıştırmak için ImageListener\bin\Debug\ImageListener.exeyürütülebilir dosya konumuna gidin. Sonraki adım için gerekli olduğundan uygulamayı çalışır durumda tutun.
  2. Görüntüye bakmak için komut istemindeki adresi kopyalayıp bir tarayıcıya yapıştırın.
  3. İşiniz bittiğinde, uygulamayı kapatmak için komut istemi penceresinde Enter'ı seçin.

Sonraki adımlar

Azure Relay hizmetini kullanan bir uygulama oluşturduğunuza göre, daha fazla bilgi edinmek için aşağıdaki makalelere bakın: