必要なクライアント証明書でトランスポート セキュリティを使用する WCF サービスを開発しました。IIS 7.5 でホストされており、クライアント証明書が必要です。mex エンドポイントをセットアップし、ブラウザーでhttps://mydomain.com/Folder/Service.svc/mex?wsdlで wsdl を表示できます。SoapUI を使用すると、正常に接続でき、サービスは完全に機能します。
ただし、svcutil.exe を使用してテスト クライアントをセットアップしたいと考えています。これは、クライアントがクライアントを作成するために行うことだからです。しかし、私が実行すると:
svcutil https://mydomain.com/Folder/Service.svc/mex?wsdl /svcutilConfig:app.config
次のエラーが表示されます。
C:\Program Files\Microsoft Visual Studio 9.0\VC>svcutil https://mydomain.com/Folder/Service.svc/mex?wsdl /svcutilConfig:app.config
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 3.0.4506.2152]
Copyright (c) Microsoft Corporation. All rights reserved.
Attempting to download metadata from 'https://mydomain.com/Folder/Service.svc/mex?wsdl' using WS-Metadata Exchange or DISCO.
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 3.0.4506.2152]
Copyright (c) Microsoft Corporation. All rights reserved.
Error: Cannot obtain Metadata from https://mydomain.com/Folder/Service.svc/mex?wsdl
If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address. For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.
WS-Metadata Exchange Error
URI: https://mydomain.com/Folder/Service.svc/mex?wsdl
Metadata contains a reference that cannot be resolved: 'https://mydomain.com/Folder/Service.svc/mex?wsdl'.
The HTTP request was forbidden with client authentication scheme 'Anonymous'.
The remote server returned an error: (403) Forbidden.
HTTP GET Error
URI: https://mydomain.com/Folder/Service.svc/mex?wsdl
There was an error downloading 'https://mydomain.com/Folder/Service.svc/mex?wsdl'.
The request failed with HTTP status 403: Forbidden.
私のサーバーのweb.configファイルからの関連する構成は次のとおりです。
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="MyServices">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehavior" name="MyService.MyServiceManager">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyServices"
name="MyServices" contract="MyService.IMyServiceManager">
<identity>
<dns value="mydomain.com" />
</identity>
</endpoint>
<endpoint address="mex" binding="wsHttpBinding" bindingConfiguration="MyServices"
name="mexEndpoint" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpsGetEnabled="true" httpsGetUrl="https://mydomain.com:443/Folder/Service.svc/mex"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
<serviceCredentials>
<clientCertificate>
<certificate storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectDistinguishedName" findValue="CN=tempClientcert"/>
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
これが私のクライアントの /svcutilConfig:app.config ファイルです。
<configuration>
<system.serviceModel>
<client>
<endpoint name="mexEndpoint" address="mex" binding="wsHttpBinding" contract="IMetadataExchange" behaviorConfiguration="MyBehavior" />
</client>
<behaviors>
<endpointBehaviors>
<behavior name="MyBehavior">
<clientCredentials>
<clientCertificate storeName="My" storeLocation="LocalMachine" x509FindType="FindBySubjectDistinguishedName" findValue="CN=tempClientcert" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
この構成が機能しない理由がわかりません。また、すべての wsdl インポートが正しい FQDN URL に解決され、IIS で匿名認証が有効になります。
任意の支援をいただければ幸いです。助けてくれてありがとう。