メタデータ公開動作
メタデータ公開動作のサンプルでは、サービスのメタデータ公開機能を制御する方法を示します。潜在的に機密性のあるサービス メタデータの意図しない漏えいを回避するため、Windows Communication Foundation (WCF) サービスの既定の構成では、メタデータの公開は無効になっています。この動作は既定ではセキュリティ保護されていますが、同時に、サービスのメタデータ公開の動作が構成で明示的に有効にならない限り、メタデータ インポート ツール (Svcutil.exe など) を使用して、サービスの呼び出しに必要なクライアント コードを生成できないことも意味します。
メモ : |
---|
このサンプルではわかりやすくするために、セキュリティで保護されていないメタデータ公開エンドポイントを作成する方法を示します。こうしたエンドポイントは、認証されていない匿名の利用者が利用できる可能性があります。これらのエンドポイントを配置する前には注意を払い、サービスのメタデータをパブリックに公開することが適切かどうか確認する必要があります。メタデータ エンドポイントをセキュリティ保護するサンプルについては、「カスタム セキュア メタデータ エンドポイント」のサンプルを参照してください。 |
このサンプルは、ICalculator
サービス コントラクトを実装する「入門サンプル」に基づいています。この例では、クライアントはコンソール アプリケーション (.exe) で、サービスはインターネット インフォメーション サービス (IIS) によってホストされます。
メモ : |
---|
このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。 |
サービスでメタデータを公開するには、サービス上に ServiceMetadataBehavior を構成する必要があります。この動作が存在する場合は、エンドポイントを構成してメタデータを公開し、IMetadataExchange コントラクトを WS-MetadataExchange (MEX) プロトコルの実装として公開できます。便宜上、このコントラクトには、構成名を略した "IMetadataExchange" という名前が付けられています。このサンプルでは、mexHttpBinding
を使用します。これは使いやすい標準バインディングで、セキュリティ モードが None に設定されている wsHttpBinding
と同等です。エンドポイントには、相対アドレスの "mex" が使用されています。このアドレスがサービスのベース アドレスに対して解決されると、エンドポイントのアドレスは https://localhost/servicemodelsamples/service.svc/mex になります。この動作の構成を次に示します。
<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,
https://localhost/servicemodelsamples/service.svc?wsdl -->
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
MEX エンドポイントを次に示します。
<!-- the MEX endpoint is exposed at
https://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" />
このサンプルでは、HttpGetEnabled プロパティを true に設定します。これにより、HTTP GET を使用してサービスのメタデータも公開されます。HTTP GET メタデータのエンドポイントを有効にするには、サービスに HTTP ベース アドレスが設定されている必要があります。クエリ文字列 ?wsdl
は、メタデータにアクセスするサービスのベース アドレスで使用されます。たとえば、Web ブラウザでサービスの WSDL を表示するには、アドレス https://localhost/servicemodelsamples/service.svc?wsdl を使用します。または、HttpsGetEnabled を true に設定してこの動作を使用することにより、HTTPS を通じてメタデータを公開することもできます。これには、HTTPS ベース アドレスが必要です。
サービスの MEX エンドポイントにアクセスするには、Service Model Metadata Utility Tool (Svcutil.exe) を使用します。
svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" https://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs
これにより、サービスのメタデータに基づくクライアントが生成されます。
HTTP GET を使用してサービスのメタデータにアクセスするには、ブラウザで https://localhost/servicemodelsamples/service.svc?wsdl を指定します。
この動作を削除してサービスを開こうとすると、例外が発生します。動作がない場合にこのエラーが発生するのは、IMetadataExchange
コントラクトを使用して構成されたエンドポイントに実装が存在しないからです。
HttpGetEnabled
を false に設定すると、サービスのメタデータが表示される代わりに CalculatorService ヘルプ ページが表示されます。
サンプルを設定、ビルド、および実行するには
「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。
ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
単一コンピュータ構成か複数コンピュータ構成かに応じて、「Windows Communication Foundation サンプルの実行」の手順に従います。
Copyright © 2007 by Microsoft Corporation.All rights reserved.