Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W przykładzie Metadata pokazano, jak kontrolować funkcje publikowania metadanych usługi. Aby zapobiec przypadkowemu ujawnieniu potencjalnie poufnych metadanych usługi, domyślna konfiguracja usług Windows Communication Foundation (WCF) wyłącza publikowanie metadanych. To zachowanie jest domyślnie bezpieczne, ale oznacza również, że nie można użyć narzędzia importowania metadanych (takiego jak Svcutil.exe), aby wygenerować kod klienta wymagany do wywołania usługi, chyba że zachowanie publikowania metadanych usługi jest jawnie włączone w konfiguracji.
Ważne
W celu zapewnienia przejrzystości w tym przykładzie pokazano, jak utworzyć niezabezpieczony punkt końcowy publikowania metadanych. Takie punkty końcowe są potencjalnie dostępne dla anonimowych nieuwierzytelnionych użytkowników i należy zachować ostrożność przed wdrożeniem takich punktów końcowych, aby zapewnić, że publiczne ujawnienie metadanych usługi jest odpowiednie. Zapoznaj się z przykładem niestandardowego bezpiecznego punktu końcowego metadanych, który zabezpiecza punkt końcowy metadanych.
Przykład jest oparty na Wprowadzeniu, który implementuje ICalculator umowę serwisową. W tym przykładzie klient jest aplikacją konsolową (.exe), a usługa jest hostowana przez usługi Internet Information Services (IIS).
Uwaga / Notatka
Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.
Aby usługa uwidaczniała metadane, ServiceMetadataBehavior musi być skonfigurowana w usłudze. Gdy to zachowanie jest obecne, można opublikować metadane, konfigurując punkt końcowy w celu uwidocznienia kontraktu IMetadataExchange jako implementacji protokołu WS-MetadataExchange (MEX). Dla wygody ten kontrakt otrzymał skróconą nazwę konfiguracji "IMetadataExchange". W tym przykładzie użyto mexHttpBinding, który jest standardowym wygodnym powiązaniem odpowiadającym wsHttpBinding, gdzie tryb zabezpieczeń jest ustawiony na None. Względny adres "mex" jest używany w punkcie końcowym, który w odniesieniu do adresu bazowego usługi skutkuje adresem punktu końcowego http://localhost/servicemodelsamples/service.svc/mex. Poniżej przedstawiono konfigurację zachowania:
<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>
Poniżej przedstawiono punkt końcowy MEX.
<!-- 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" />
Ten przykład ustawia HttpGetEnabled właściwość na true, która uwidacznia również metadane usługi przy użyciu protokołu HTTP GET. Aby włączyć punkt końcowy metadanych HTTP GET, usługa musi mieć podstawowy adres HTTP. Ciąg ?wsdl zapytania jest używany na podstawowym adresie usługi w celu uzyskania dostępu do metadanych. Aby na przykład wyświetlić plik WSDL dla usługi w przeglądarce internetowej, użyj adresu http://localhost/servicemodelsamples/service.svc?wsdl. Alternatywnie możesz użyć tego zachowania, aby uwidocznić metadane za pośrednictwem protokołu HTTPS, ustawiając wartość HttpsGetEnabled .true Wymaga to podstawowego adresu HTTPS.
Aby uzyskać dostęp do punktu końcowego MEX usługi, użyj narzędzia ServiceModel Metadata Tool (Svcutil.exe).
svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs
Spowoduje to wygenerowanie klienta na podstawie metadanych usługi.
Aby uzyskać dostęp do metadanych usługi przy użyciu protokołu HTTP GET, wskaż w przeglądarce adres http://localhost/servicemodelsamples/service.svc?wsdl.
Jeśli usuniesz to zachowanie i spróbujesz otworzyć usługę, otrzymasz wyjątek. Błąd występuje, ponieważ bez konfiguracji punkt końcowy skonfigurowany za pomocą kontraktu IMetadataExchange nie jest zaimplementowany.
Jeśli ustawisz HttpGetEnabled na false, zobaczysz stronę pomocy CalculatorService zamiast metadanych usługi.
Aby skonfigurować, skompilować i uruchomić przykładowy program
Upewnij się, że wykonano procedurę instalacji One-Time dla przykładów programu Windows Communication Foundation.
Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w Kompilowanie przykładów Windows Communication Foundation.
Aby uruchomić przykład w konfiguracji pojedynczej lub między maszynami, postępuj zgodnie z instrukcjami w Uruchamianie przykładów programu Windows Communication Foundation.