Nasıl yapılır: Özel Bir WS-Metadata Değişimi Bağlaması Yapılandırma
Bu makalede özel bir WS-Metadata değişim bağlamasını yapılandırma işlemi açıklanmaktadır. Windows Communication Foundation (WCF) dört sistem tanımlı meta veri bağlaması içerir, ancak istediğiniz bağlamayı kullanarak meta verileri yayımlayabilirsiniz. Bu makalede, kullanarak meta verileri yayımlama işlemi gösterilmektedir wsHttpBinding
. Bu bağlama, meta verileri güvenli bir şekilde ortaya çıkarma seçeneği sunar. Bu makaledeki kod, Başlarken'i temel alır.
Yapılandırma dosyası kullanma
Hizmetin yapılandırma dosyasında, etiketini içeren
serviceMetadata
bir hizmet davranışı ekleyin:<behaviors> <serviceBehaviors> <behavior name="CalculatorServiceBehavior"> <serviceMetadata httpGetEnabled="True"/> </behavior> </serviceBehaviors> </behaviors>
Hizmet etiketine bu yeni davranışa başvuran bir
behaviorConfiguration
öznitelik ekleyin:<service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior" />
Adres olarak mex,
wsHttpBinding
bağlama ve IMetadataExchange sözleşme olarak mex belirten bir meta veri uç noktası ekleyin:<endpoint address="mex" binding="wsHttpBinding" contract="IMetadataExchange" />
Meta veri değişim uç noktasının düzgün çalıştığını doğrulamak için istemci yapılandırma dosyasına bir uç nokta etiketi ekleyin:
<endpoint name="MyMexEndpoint" address="http://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
İstemcinin Main() yönteminde yeni MetadataExchangeClient bir örnek oluşturun, özelliğini olarak
true
ayarlayınResolveMetadataReferences, çağrısı GetMetadata yapın ve döndürülen meta veri koleksiyonunda yineleyin:string mexAddress = "http://localhost:8000/servicemodelsamples/service/mex"; MetadataExchangeClient mexClient = new MetadataExchangeClient("MyMexEndpoint"); mexClient.ResolveMetadataReferences = true; MetadataSet mdSet = mexClient.GetMetadata(new EndpointAddress(mexAddress)); foreach (MetadataSection section in mdSet.MetadataSections) Console.WriteLine("Metadata section: " + section.Dialect.ToString());
Koda göre yapılandırma
WSHttpBinding Bağlama örneği oluşturma:
WSHttpBinding binding = new WSHttpBinding();
ServiceHost Örnek oluşturma:
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);
Hizmet uç noktası ekleyin ve bir ServiceMetadataBehavior örnek ekleyin:
serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress); ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; serviceHost.Description.Behaviors.Add(smb);
Daha önce oluşturulan öğesini WSHttpBinding belirterek bir meta veri değişim uç noktası ekleyin:
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);
Meta veri değişim uç noktasının düzgün çalıştığını doğrulamak için istemci yapılandırma dosyasına bir uç nokta etiketi ekleyin:
<endpoint name="MyMexEndpoint" address="http://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
İstemcinin Main() yönteminde yeni MetadataExchangeClient bir örnek oluşturun, özelliğini olarak
true
ayarlayınResolveMetadataReferences, çağrısı GetMetadata yapın ve döndürülen meta veri koleksiyonunda yineleyin:string mexAddress = "http://localhost:8000/servicemodelsamples/service/mex"; MetadataExchangeClient mexClient = new MetadataExchangeClient("MyMexEndpoint"); mexClient.ResolveMetadataReferences = true; MetadataSet mdSet = mexClient.GetMetadata(new EndpointAddress(mexAddress)); foreach (MetadataSection section in mdSet.MetadataSections) Console.WriteLine("Metadata section: " + section.Dialect.ToString());