Я разработал службу WCF, использующую транспортную безопасность с требуемым сертификатом клиента. Он размещен на IIS 7.5 и требует проверки сертификата клиента. Я установил mex endpoint и могу просмотреть wsdl в своем браузере по номеру https://mydomain.com/Folder/Service.svc/mex?wsdl. Использование SoapUI, я могу успешно подключиться, и сервис работает отлично.WCF svcutil с сертификатом клиента
Тем не менее, я хочу настроить тестовый клиент, используя 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 разрешает правильный URL-адрес FQDN, а анонимная аутентификация включена в IIS.
Любая помощь будет оценена по достоинству. Спасибо за вашу помощь.