Nasıl yapılır: Yapılandırma Dosyası Kullanarak Bir Hizmet için Meta Verileri Yayımlama
Bu, Bir Windows Communication Foundation (WCF) hizmeti için yayımlama meta verilerini gösteren iki nasıl yapılır konusundan biridir. Yapılandırma dosyası ve kod kullanarak hizmetin meta verileri nasıl yayımlaması gerektiğini belirtmenin iki yolu vardır. Bu konuda, yapılandırma dosyası kullanarak bir hizmet için meta verilerin nasıl yayımlanması gösterilmektedir.
Dikkat
Bu konu başlığında, meta verilerin güvenli olmayan bir şekilde nasıl yayımlanması gösterilmektedir. Herhangi bir istemci hizmetten meta verileri alabilir. Hizmetinizin meta verileri güvenli bir şekilde yayımlamasını istiyorsanız bkz . Özel Güvenli Meta Veri Uç Noktası.
Kodda meta verileri yayımlama hakkında daha fazla bilgi için bkz . Nasıl yapılır: Kod Kullanarak Hizmet için Meta Verileri Yayımlama. Meta verileri yayımlama, istemcilerin sorgu dizesini kullanarak WS-Transfer GET isteği veya HTTP/GET isteği kullanarak ?wsdl
meta verileri almasını sağlar. Kodun çalıştığından emin olmak için temel bir WCF hizmeti oluşturun. Kolaylık olması için, aşağıdaki kodda temel bir şirket içinde barındırılan hizmet sağlanır.
using System;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Description;
namespace Metadata.Samples
{
[ServiceContract]
public interface ISimpleService
{
[OperationContract]
string SimpleMethod(string msg);
}
class SimpleService : ISimpleService
{
public string SimpleMethod(string msg)
{
Console.WriteLine("The caller passed in " + msg);
return "Hello " + msg;
}
}
class Program
{
static void Main(string[] args)
{
ServiceHost host = new ServiceHost(typeof(SimpleService),
new Uri("http://localhost:8001/MetadataSample"));
try
{
// Open the service host to accept incoming calls
host.Open();
// The service can now be accessed.
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
// Close the ServiceHostBase to shutdown the service.
host.Close();
}
catch (CommunicationException commProblem)
{
Console.WriteLine("There was a communication problem. " + commProblem.Message);
Console.Read();
}
}
}
}
Bu hizmet, yapılandırma dosyası kullanılarak yapılandırılan şirket içinde barındırılan bir hizmettir. Aşağıdaki yapılandırma dosyası bir başlangıç noktası görevi görür.
<configuration>
<system.serviceModel>
<services>
<service name="Metadata.Example.SimpleService">
<endpoint address=""
binding="basicHttpBinding"
contract="Metadata.Example.ISimpleService" />
</service>
</services>
<behaviors>
</behaviors>
</system.serviceModel>
</configuration>
Uygulama yapılandırma dosyası kullanarak WCF hizmetinin meta verilerini yayımlamak için
App.config dosyasının içinde, kapanış
</services>
öğesinden sonra bir<behaviors>
öğe oluşturun.öğesinin içine
<behaviors>
bir<serviceBehaviors>
öğe ekleyin.öğesine bir
<behavior>
öğe<serviceBehaviors>
ekleyin ve öğesininname
özniteliği<behavior>
için bir değer belirtin.öğesine bir
<serviceMetadata>
öğe<behavior>
ekleyin. özniteliğinihttpGetEnabled
true
olarak ve özniteliğinipolicyVersion
İlke15 olarak ayarlayın.httpGetEnabled
hizmetin bir HTTP GET isteği tarafından yapılan meta veri isteklerini yanıtlamasına izin verir.policyVersion
, meta veri oluştururken hizmete WS-policy 1.5'e uymasını bildirir.öğesine bir
behaviorConfiguration
öznitelik<service>
ekleyin ve aşağıdaki kod örneğinde gösterildiği gibi 1. adımda eklenen öğenin özniteliğini<behavior>
belirtinname
.<services> <service name="Metadata.Example.SimpleService" behaviorConfiguration="SimpleServiceBehavior"> ... </service> </services> <behaviors> <serviceBehaviors> <behavior name="SimpleServiceBehavior"> <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" /> </behavior> </serviceBehaviors> </behaviors>
Aşağıdaki kod örneğinde gösterildiği gibi, sözleşme olarak
IMetadataExchange
ayarlanmış bir veya daha fazla<endpoint>
öğe ekleyin.<services> <service name="Metadata.Example.SimpleService" behaviorConfiguration="SimpleServiceBehavior"> <endpoint address="" binding="wsHttpBinding" contract="Metadata.Example.ISimpleService" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services>
Önceki adımda eklenen meta veri uç noktaları için özniteliğini
binding
aşağıdakilerden biri olarak ayarlayın:mexHttpBinding
http yayını için.mexHttpsBinding
https yayını için.mexNamedPipeBinding
adlandırılmış kanal yayını için.mexTcpBinding
TCP yayını için.
Önceki adımda eklenen meta veri uç noktaları için adresi şuna eşit olarak ayarlayın:
Ana bilgisayar uygulamasının temel adresini, temel adres meta veri bağlama ile aynıysa yayın noktası olarak kullanmak için boş bir dize.
Konak uygulamasının temel adresi varsa göreli adres.
Mutlak adres.
Konsol uygulamasını derleyin ve çalıştırın.
Hizmetin
http://localhost:8001/MetadataSample
temel adresine (bu örnekte) göz atın ve meta veri yayımlamanın açık olduğunu doğrulayın. Aksi takdirde, sonuçta elde edilen sayfanın üst kısmındaki bir ileti görüntülenir: "Bu hizmet için meta veri yayımlama şu anda devre dışı."
Varsayılan uç noktaları kullanmak için
Varsayılan uç noktaları kullanan bir hizmette meta verileri yapılandırmak için, önceki örnekte olduğu gibi yapılandırma dosyasında öğesini belirtin ServiceMetadataBehavior , ancak herhangi bir uç nokta belirtmeyin. Daha sonra yapılandırma dosyası şöyle görünür.
<configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="SimpleServiceBehavior"> <serviceMetadata httpGetEnabled="True" policyVersion="Policy12" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
Hizmet, değerine ayarlanmış
true
bir ServiceMetadataBehaviorhttpGetEnabled
değerine sahip olduğundan, hizmet yayımlama meta verilerini etkinleştirmiştir ve hiçbir uç nokta açıkça eklenmediğinden çalışma zamanı varsayılan uç noktaları ekler. Varsayılan uç noktalar, bağlamalar ve davranışlar hakkında daha fazla bilgi için bkz. WCF Hizmetleri için Basitleştirilmiş Yapılandırma ve Basitleştirilmiş Yapılandırma.
Örnek
Aşağıdaki kod örneği, temel bir WCF hizmetinin uygulamasını ve hizmet için meta verileri yayımlayan yapılandırma dosyasını gösterir.
using System;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Description;
namespace Metadata.Samples
{
[ServiceContract]
public interface ISimpleService
{
[OperationContract]
string SimpleMethod(string msg);
}
class SimpleService : ISimpleService
{
public string SimpleMethod(string msg)
{
Console.WriteLine("The caller passed in " + msg);
return "Hello " + msg;
}
}
class Program
{
static void Main(string[] args)
{
ServiceHost host = new ServiceHost(typeof(SimpleService),
new Uri("http://localhost:8001/MetadataSample"));
try
{
// Open the service host to accept incoming calls
host.Open();
// The service can now be accessed.
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
// Close the ServiceHostBase to shutdown the service.
host.Close();
}
catch (CommunicationException commProblem)
{
Console.WriteLine("There was a communication problem. " + commProblem.Message);
Console.Read();
}
}
}
}
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="SimpleServiceBehavior">
<serviceMetadata httpGetEnabled="True" policyVersion="Policy12" />
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>