Aracılığıyla paylaş


Meta Veri Yayımlama Davranışı

Meta veri örneği, bir hizmetin meta veri yayımlama özelliklerini denetlemeyi gösterir. Hassas olabilecek hizmet meta verilerinin yanlışlıkla açıklanmasını önlemek için, Windows Communication Foundation (WCF) hizmetleri için varsayılan yapılandırma meta veri yayımlamayı devre dışı bırakır. Bu davranış varsayılan olarak güvenlidir, ancak aynı zamanda hizmetin meta veri yayımlama davranışı yapılandırmada açıkça etkinleştirilmediği sürece hizmeti çağırmak için gereken istemci kodunu oluşturmak için bir meta veri içeri aktarma aracı (Svcutil.exegibi) kullanamazsınız.

Önemli

Netlik sağlamak için bu örnekte güvenli olmayan meta veri yayımlama uç noktasının nasıl oluşturulacağı gösterilmektedir. Bu tür uç noktalar anonim kimliği doğrulanmamış tüketiciler tarafından kullanılabilir ve hizmetin meta verilerini genel olarak açıklamanın uygun olduğundan emin olmak için bu uç noktalar dağıtılmadan önce dikkatli olunmalıdır. Meta veri uç noktasının güvenliğini sağlayan bir örnek için bkz. Özel Güvenli Meta Veri Uç Noktası örneği.

Örnek, hizmet sözleşmesini uygulayan ICalculator temel alınarak oluşturulmuştur. Bu örnekte, istemci bir konsol uygulamasıdır (.exe) ve hizmet Internet Information Services (IIS) tarafından barındırılır.

Uyarı

Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda yer alır.

Bir hizmetin meta verilerini kullanıma sunabilmesi için, ServiceMetadataBehavior hizmette yapılandırılmalıdır. Bu davranış mevcut olduğunda, sözleşmeyi bir WS-MetadataExchange (MEX) protokolünün uygulaması olarak kullanıma sunmak IMetadataExchange için bir uç nokta yapılandırarak meta verileri yayımlayabilirsiniz. Kolaylık olması açısından, bu sözleşmeye "IMetadataExchange" kısaltmalı yapılandırma adı verilmiştir. Bu örnek, kolaylık sağlayan standart bir bağlama olan mexHttpBinding öğesini kullanır; bu, güvenlik modu wsHttpBinding olarak ayarlanmış None ile eşdeğerdir. Uçbirimde "mex" adlı göreli bir adres kullanılır ve hizmetlerin temel adresine göre çözümlendiğinde uçbirim adresi olarak http://localhost/servicemodelsamples/service.svc/mex elde edilir. Davranış yapılandırması aşağıda gösterilmiştir:

<behaviors>
  <serviceBehaviors>
    <behavior name="CalculatorServiceBehavior">
      <!-- The serviceMetadata behavior publishes metadata through
           the IMetadataExchange contract. When this behavior is
           present, you can expose this contract through an endpoint
           as shown below. Setting httpGetEnabled to true publishes
           the service's WSDL at the <baseaddress>?wsdl, for example,
           http://localhost/servicemodelsamples/service.svc?wsdl -->
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Aşağıda MEX uç noktası gösterilmektedir.

<!-- the MEX endpoint is exposed at
     http://localhost/servicemodelsamples/service.svc/mex
     To expose the IMetadataExchange contract, you
     must enable the serviceMetadata behavior as demonstrated
     previously. -->
<endpoint address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange" />

Bu örnek, http GET kullanarak hizmetin meta verilerini de kullanıma sunan özelliğini HttpGetEnabledolarak ayarlartrue. HTTP GET meta veri uç noktasını etkinleştirmek için hizmetin bir HTTP temel adresi olmalıdır. Sorgu dizesi ?wsdl , meta verilere erişmek için hizmetin temel adresinde kullanılır. Örneğin, bir Web tarayıcısında hizmetin WSDL'sini görmek için adresini http://localhost/servicemodelsamples/service.svc?wsdlkullanırsınız. Alternatif olarak, meta verileri HTTPS üzerinden kullanıma açmak için HttpsGetEnabled'yi true olarak ayarlayarak bu davranışı kullanabilirsiniz. Bunun için bir HTTPS temel adresi gerekir.

Hizmetin MEX uç noktasına erişmek için ServiceModel Meta Veri Yardımcı Programı Aracı'nı (Svcutil.exe) kullanın.

svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs

Bu, hizmetin meta verilerini temel alan bir istemci oluşturur.

HTTP GET kullanarak hizmetin meta verilerine erişmek için tarayıcınızı http://localhost/servicemodelsamples/service.svc?wsdl adresine gidin.

Eğer bu davranışı kaldırırsanız ve hizmeti açmaya çalışırsanız, bir özel durumla karşılaşırsınız. Bu hatanın nedeni davranış olmadan sözleşmeyle yapılandırılan uç noktanın IMetadataExchange uygulaması olmamasıdır.

HttpGetEnabled öğesini false olarak ayarlarsanız, hizmetin meta verilerini görmek yerine CalculatorService yardım sayfasını görürsünüz.

Örneği ayarlamak, derlemek ve çalıştırmak için

  1. Windows Communication Foundation Örnekleri içinOne-Time Kurulum Yordamını yaptığınızdan emin olun.

  2. Çözümün C# veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örneklerioluşturma başlığındaki yönergeleri izleyin.

  3. Örneği tek bir makine veya makineler arası bir yapılandırmada çalıştırmak için, Windows Communication Foundation örneklerini çalıştırmayönergelerini izleyin.