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