Öğretici: Temel bir Windows Communication Foundation hizmetini barındırma ve çalıştırma
Bu öğreticide, temel bir Windows Communication Foundation (WCF) uygulaması oluşturmak için gereken beş görevden üçüncüsü açıklanmaktadır. Öğreticilere genel bakış için bkz . Öğretici: Windows Communication Foundation uygulamalarını kullanmaya başlama.
WCF uygulaması oluşturmak için bir sonraki görev, bir wcf hizmetini bir konsol uygulamasında barındırmaktır. WCF hizmeti, her biri bir veya daha fazla hizmet işlemi sunan bir veya daha fazla uç noktayı kullanıma sunar. Hizmet uç noktası aşağıdaki bilgileri belirtir:
- Hizmeti bulabileceğiniz bir adres.
- İstemcinin hizmetle nasıl iletişim kurması gerektiğini açıklayan bilgileri içeren bağlama.
- Hizmetin istemcilerine sağladığı işlevselliği tanımlayan bir sözleşme.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- WCF hizmetini barındırmak için bir konsol uygulaması projesi oluşturun ve yapılandırın.
- WCF hizmetini barındırmak için kod ekleyin.
- Yapılandırma dosyasını güncelleştirin.
- WCF hizmetini başlatın ve çalıştığını doğrulayın.
Hizmeti barındırmak için bir konsol uygulaması projesi oluşturma ve yapılandırma
Visual Studio'da konsol uygulaması projesi oluşturma:
Dosya menüsünden Projeyi/Çözümü Aç'ı>seçin ve daha önce oluşturduğunuz GettingStarted çözümüne (GettingStarted.sln) göz atın. Aç'ı seçin.
Görünüm menüsünden Çözüm Gezgini'ı seçin.
Çözüm Gezgini penceresinde Başlarken çözümünü (üst düğüm) ve ardından kısayol menüsünden Yeni Proje Ekle'yi>seçin.
Yeni Proje Ekle penceresinde, sol taraftaki Visual C# veya Visual Basic altındaki Windows Masaüstü kategorisini seçin.
Konsol Uygulaması (.NET Framework) şablonunu seçin ve Ad olarak GettingStartedHost girin. Tamam'ı seçin.
GettingStartedLib projesine GettingStartedHost projesine bir başvuru ekleyin:
Çözüm Gezgini penceresinde, GettingStartedHost projesinin altındaki Başvurular klasörünü seçin ve ardından kısayol menüsünden Başvuru Ekle'yi seçin.
Başvuru Ekle iletişim kutusundaki pencerenin sol tarafındaki Projeler'in altında Çözüm'e tıklayın.
Pencerenin orta bölümünde GettingStartedLib'i ve ardından Tamam'ı seçin.
Bu eylem, GettingStartedLib projesinde tanımlanan türleri GettingStartedHost projesinde kullanılabilir hale getirir.
GettingStartedHost projesinde derlemeye System.ServiceModel bir başvuru ekleyin:
Çözüm Gezgini penceresinde, GettingStartedHost projesinin altındaki Başvurular klasörünü seçin ve ardından kısayol menüsünden Başvuru Ekle'yi seçin.
Başvuru Ekle penceresinde, pencerenin sol tarafındaki Derlemeler'in altında Çerçeve'yi seçin.
System.ServiceModel'i ve ardından Tamam'ı seçin.
Dosyayı>Tümünü Kaydet'i seçerek çözümü kaydedin.
Hizmeti barındırmak için kod ekleme
Hizmeti barındırmak için aşağıdaki adımları uygulamak için kod eklersiniz:
- Temel adres için bir URI oluşturun.
- Hizmeti barındırmak için bir sınıf örneği oluşturun.
- Hizmet uç noktası oluşturma.
- Meta veri değişimini etkinleştirin.
- Gelen iletileri dinlemek için hizmet ana bilgisayarını açın.
Kodda aşağıdaki değişiklikleri yapın:
GettingStartedHost projesinde Program.cs veya Module1.vb dosyasını açın ve kodunu aşağıdaki kodla değiştirin:
using System; using System.ServiceModel; using System.ServiceModel.Description; using GettingStartedLib; namespace GettingStartedHost { class Program { static void Main(string[] args) { // Step 1: Create a URI to serve as the base address. Uri baseAddress = new Uri("http://localhost:8000/GettingStarted/"); // Step 2: Create a ServiceHost instance. ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress); try { // Step 3: Add a service endpoint. selfHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService"); // Step 4: Enable metadata exchange. ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; selfHost.Description.Behaviors.Add(smb); // Step 5: Start the service. selfHost.Open(); Console.WriteLine("The service is ready."); // Close the ServiceHost to stop the service. Console.WriteLine("Press <Enter> to terminate the service."); Console.WriteLine(); Console.ReadLine(); selfHost.Close(); } catch (CommunicationException ce) { Console.WriteLine("An exception occurred: {0}", ce.Message); selfHost.Abort(); } } } }
Imports System.ServiceModel Imports System.ServiceModel.Description Imports GettingStartedLib.GettingStartedLib Module Service Class Program Shared Sub Main() ' Step 1: Create a URI to serve as the base address. Dim baseAddress As New Uri("http://localhost:8000/GettingStarted/") ' Step 2: Create a ServiceHost instance. Dim selfHost As New ServiceHost(GetType(CalculatorService), baseAddress) Try ' Step 3: Add a service endpoint. selfHost.AddServiceEndpoint( _ GetType(ICalculator), _ New WSHttpBinding(), _ "CalculatorService") ' Step 4: Enable metadata exchange. Dim smb As New ServiceMetadataBehavior() smb.HttpGetEnabled = True selfHost.Description.Behaviors.Add(smb) ' Step 5: Start the service. selfHost.Open() Console.WriteLine("The service is ready.") ' Close the ServiceHost to stop the service. Console.WriteLine("Press <Enter> to terminate the service.") Console.WriteLine() Console.ReadLine() selfHost.Close() Catch ce As CommunicationException Console.WriteLine("An exception occurred: {0}", ce.Message) selfHost.Abort() End Try End Sub End Class End Module
Bu kodun nasıl çalıştığı hakkında bilgi için bkz . Hizmet barındırma programı adımları.
Proje özelliklerini güncelleştirin:
Çözüm Gezgini penceresinde GettingStartedHost klasörünü ve ardından kısayol menüsünden Özellikler'i seçin.
GettingStartedHost özellikleri sayfasında Uygulama sekmesini seçin:
C# projeleri için Başlangıç nesnesi listesinden GettingStartedHost.Program'ı seçin.
Visual Basic projeleri için Başlangıç nesnesi listesinden Service.Program'ı seçin.
Dosya menüsünden Tümünü Kaydet'i seçin.
Hizmetin çalıştığını doğrulama
Çözümü derleyin ve ardından Visual Studio'dan GettingStartedHost konsol uygulamasını çalıştırın.
Hizmet yönetici ayrıcalıklarıyla çalıştırılmalıdır. Visual Studio'yu yönetici ayrıcalıklarıyla açtığınızdan, Visual Studio'da GettingStartedHost'u çalıştırdığınızda, uygulama yönetici ayrıcalıklarıyla da çalıştırılır. Alternatif olarak, yönetici olarak yeni bir komut istemi açabilir (kısayol menüsünden Diğer>Yönetici olarak çalıştır'ı seçin) ve içinde GettingStartedHost.exe çalıştırabilirsiniz.
Bir web tarayıcısı açın ve adresinde
http://localhost:8000/GettingStarted/
hizmetin sayfasına göz atın.Not
Bunun gibi hizmetler, dinleme için makineye HTTP adreslerini kaydetmek için uygun izni gerektirir. Yönetici istrator hesapları bu izne sahiptir, ancak yönetici olmayan hesaplara HTTP ad alanları için izin verilmelidir. Ad alanı rezervasyonlarını yapılandırma hakkında daha fazla bilgi için bkz . HTTP ve HTTPS'yi yapılandırma.
Hizmet barındırma programı adımları
Hizmeti barındırmak için eklediğiniz koddaki adımlar aşağıdaki gibi açıklanmıştır:
1. Adım: Hizmetin temel adresini tutmak için sınıfının bir örneğini
Uri
oluşturun. Temel adres içeren bir URL'nin, bir hizmeti tanımlayan isteğe bağlı bir URI'si vardır. Temel adres şu şekilde biçimlendirilir:<transport>://<machine-name or domain><:optional port #>/<optional URI segment>
. Hesap makinesi hizmetinin temel adresi HTTP aktarımı, localhost, bağlantı noktası 8000 ve GetStarted URI segmentini kullanır.2. Adım: Hizmeti barındırmak ServiceHost için kullandığınız sınıfın bir örneğini oluşturun. Oluşturucu iki parametre alır: hizmet sözleşmesini uygulayan sınıfın türü ve hizmetin temel adresi.
3. Adım: Örnek ServiceEndpoint oluşturma. Hizmet uç noktası bir adres, bağlama ve hizmet sözleşmelerinden oluşur. ServiceEndpoint Oluşturucu, hizmet sözleşmesi arabirim türünden, bağlamadan ve adreslerden oluşur. Hizmet sözleşmesi, hizmet türünde tanımladığınız ve uyguladığınız sözleşmedir
ICalculator
. Bu örneğin bağlaması WSHttpBinding, yerleşik bir bağlamadır ve WS-* belirtimlerine uyan uç noktalara bağlanır. WCF bağlamaları hakkında daha fazla bilgi için bkz . WCF bağlamalarına genel bakış. Uç noktayı tanımlamak için adresi temel adrese eklersiniz. Kod adresi CalculatorService olarak ve uç nokta için tam adresi olarakhttp://localhost:8000/GettingStarted/CalculatorService
belirtir.Önemli
.NET Framework Sürüm 4 ve üzeri için hizmet uç noktası eklemek isteğe bağlıdır. Bu sürümler için kodunuzu veya yapılandırmanızı eklemezseniz WCF, hizmet tarafından uygulanan her temel adres ve sözleşme bileşimi için bir varsayılan uç nokta ekler. Varsayılan uç noktalar hakkında daha fazla bilgi için bkz . Uç nokta adresi belirtme. Varsayılan uç noktalar, bağlamalar ve davranışlar hakkında daha fazla bilgi için bkz . Basitleştirilmiş yapılandırma ve WCF hizmetleri için basitleştirilmiş yapılandırma.
4. Adım: Meta veri değişimini etkinleştirin. İstemciler, hizmet işlemlerini çağırmak üzere proxy'ler oluşturmak için meta veri değişimini kullanır. Meta veri değişimini etkinleştirmek için bir ServiceMetadataBehavior örnek oluşturun, özelliğini olarak
true
ayarlayın HttpGetEnabled ve nesnesini Behaviors örnek koleksiyonuna ServiceHost ekleyinServiceMetadataBehavior
.5. Adım: Gelen iletileri dinlemek için açın ServiceHost . Uygulama, Enter tuşuna basmanızı bekler. Uygulama örneği ServiceHostoluşturulduktan sonra bir try/catch bloğu yürütür. tarafından ServiceHostoluşan özel durumları güvenli bir şekilde yakalama hakkında daha fazla bilgi için bkz . WCF istemci kaynaklarını serbest bırakmak için Kapat ve Durdur'u kullanma.
Önemli
BIR WCF hizmet kitaplığı eklediğinizde, bir hizmet konağı başlatarak hata ayıklarsanız, Visual Studio bunu sizin için barındırıyor. Çakışmaları önlemek için Visual Studio'yu WCF hizmet kitaplığını barındırmasını engelleyebilirsiniz.
- Çözüm Gezgini'daGettingStartedLib projesini seçin ve kısayol menüsünden Özellikler'i seçin.
- WCF Seçenekleri'ni seçin ve aynı çözümdeki başka bir projede hata ayıklarken WCF Hizmet Ana Bilgisayarını Başlat'ın işaretini kaldırın.
Sonraki adımlar
Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:
- WCF hizmetini barındırmak için bir konsol uygulaması projesi oluşturun ve yapılandırın.
- WCF hizmetini barındırmak için kod ekleyin.
- Yapılandırma dosyasını güncelleştirin.
- WCF hizmetini başlatın ve çalıştığını doğrulayın.
WCF istemcisi oluşturmayı öğrenmek için sonraki öğreticiye geçin.