Öğ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 açıklanı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 gerçekleştirin:
- 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:
- Azure aboneliği. Aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
- Visual Studio 2015 veya üzeri. Bu öğreticideki örneklerde Visual Studio 2019 kullanılır.
- .NET için Azure SDK. SDK indirmeleri sayfasından yükleyin.
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 aşağıdaki örnekte gösterilir.
WCF sözleşmesi ile REST stilindeki 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 GET
ile 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
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.
Visual Studio'da Yeni proje oluştur'u seçin.
Yeni proje oluştur bölümünde C# için Konsol Uygulaması (.NET Framework) seçeneğini belirleyin ve İleri'yi seçin.
Projeyi ImageListener olarak adlandırın. Varsayılan Konum'u kullanın ve oluştur'u seçin.
Bir 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.Çözüm Gezgini ImageListener projesine sağ tıklayıp NuGet Paketlerini Yönet'i seçin.
Gözat'ı seçin, ardından WindowsAzure.ServiceBus için arama 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.dll başvuruları ekler. Bu paket, Service Bus kitaplıklarına ve WCF'ye
System.ServiceModel
otomatik olarak başvuru ekler.Projeye açıkça bir başvuru
System.ServiceModel.Web.dll
ekleyin. Çözüm Gezgini proje klasörünün altındaki Başvurular'a sağ tıklayın ve Başvuru Ekle'yi seçin.Başvuru Ekle'de Çerçeve'yi seçin ve Arama'ya System.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:
Program.cs dosyasının en üstüne aşağıdaki
using
deyimleri 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ıyla 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.
Ad alanını olarak
Microsoft.ServiceBus.Samples
yeniden adlandırınImageListener
.namespace Microsoft.ServiceBus.Samples { ...
Ad alanı bildiriminin küme ayracı açıldıktan hemen sonra adlı
IImageContract
yeni bir arabirim tanımlayın ve özniteliğini değerinehttps://samples.microsoft.com/ServiceModel/Relay/RESTTutorial1
sahip 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.
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ınOperationContract
.public interface IImageContract { [OperationContract] Stream GetImage(); }
özniteliğine
OperationContract
değerini ekleyinWebGet
.public interface IImageContract { [OperationContract, WebGet] Stream GetImage(); }
değerinin
WebGet
eklenmesi, geçiş hizmetinin HTTP GET isteklerini adresine yönlendirmesineGetImage
ve dönüş değerleriniGetImage
birHTTP GETRESPONSE
yanıta çevirmesine olanak tanır. Öğ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.IImageContract
tanımından hemen sonra,IImageContract
veIClientChannel
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. Ardından 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 almakGetImage
ve istemci tarayıcısı için olarak çevirmekHTTP GETRESPONSE
için kanalı kullanır.Şimdiye kadarki çalışmalarınızın doğruluğunu onaylamak için Derleme Çözümü Derle'yi>seçin.
WCF Geçişi sözleşmelerini 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 bir arabirim 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 app.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 aşağıdaki örnekte gösterilir.
Önceki adımlarda olduğu gibi REST stili sözleşme ile WCF Geçişi sözleşmesinin uygulanması arasında çok az fark vardır.
REST stilinde Service Bus sözleşmesini uygulama
IImageContract
arabiriminin tanımından hemen sonraImageService
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.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ı.
Projenize bir .jpg görüntüsü ekleyin. Bu dosya, hizmetin alıcı tarayıcıda görüntülediği bir resimdir.
- Projenize sağ tıklayın ve Ekle'yi seçin.
- Ardından Mevcut Öğe'yi seçin.
- 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.jpg olduğ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.
Çalışan hizmetin görüntü dosyasını bulabileceğ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ış Dizinine Kopyala'yı Kopyala olarak ayarlayın.
projeye System.Drawing.dll derlemesine başvuru eklemek için Arabirimi olan bir sözleşme oluşturmak için içindeki yordamı kullanın.
Aşağıdaki ilişkili
using
deyimleri ekleyin:using System.Drawing; using System.Drawing.Imaging; using Microsoft.ServiceBus; using Microsoft.ServiceBus.Web;
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); } }
Ö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öntemiImageService
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 .jpg olarak bildirir ve bilgileri akışa alır.Derleme Çözümü Oluştur'a>tıklayın.
Service Bus üzerinde web hizmetini çalıştırmak için yapılandırma tanımlama
Çözüm Gezgini app.config dosyasına ç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.
<system.serviceModel>
XML öğesi, bir veya birden çok hizmeti tanımlayan WCF öğesidir. Burada hizmet adını ve uç noktayı tanımlamak için kullanılır. öğesinin<system.serviceModel>
en altına, ancak yine de 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ı
relayClientAuthenticationType
None
tanımlar. Bu ayar, bu bağlamayı kullanan bir uç noktanın istemci kimlik bilgisi gerektirmediğini gösterir.<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ılansbTokenProvider
öğesini kullanır.öğesinden
<services>
sonra, öğesini Paylaşılan Erişim İmzası (SAS) anahtarıyla değiştirerekSAS_KEY
aşağıdaki içeriğe sahip bir<behaviors>
öğe oluşturun. Azure portalından 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>
Yine App.config dosyasındaki öğesinde
<appSettings>
, bağlantı dizesi değerinin tamamını portaldan daha önce aldığınız bağlantı dizesi 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>
Çözümün tamamını oluşturmak için Derleme>Çö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şkilendirilmiş 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örüntülenir.
Hizmet için taban adresi oluşturma
İş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ğinizdenyourNamespace
emin olun.string serviceNamespace = "yourNamespace";
Service Bus, benzersiz bir URI oluşturmak için ad alanınızdaki adı kullanır.
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, oluşturmak istediğiniz konağın türünü (bir olan ImageService
) ve konak uygulamasını kullanıma açmak istediğiniz adresi geçirir.
Web hizmeti ana bilgisayarını çalıştırma
Hala içinde
Main()
, hizmeti açmak için aşağıdaki satırı ekleyin.host.Open();
Hizmet artık çalışır durumdadır.
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();
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.exe adlı bir yürütülebilir dosyada 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 edin
Çözümü derledikten sonra uygulamayı çalıştırmak için şunları yapın:
- F5'i seçin veya hizmeti çalıştırmak için ImageListener\bin\Debug\ImageListener.exe yürütülebilir dosya konumuna gidin. Sonraki adım için gerekli olduğundan uygulamayı çalışır durumda tutun.
- Görüntüye bakmak için komut istemindeki adresi kopyalayıp bir tarayıcıya yapıştırın.
- İşiniz bittiğinde, uygulamayı kapatmak için komut istemi penceresinde Enter'ı seçin.
İlgili içerik
Azure Relay hizmetini kullanan bir uygulama oluşturduğunuza göre daha fazla bilgi edinmek için aşağıdaki makalelere bakın: