Я пытался опубликовать веб-службу WCF на своем сервере IIS, используя нестандартный порт HTTPS. Доступ к серверу должен быть возможен только после аутентификации (через обычную аутентификацию). Веб-сервис, созданный для тестирования, является базовым проектом, который вы получаете по умолчанию при создании WCF Service Application
в Visual Studio. Единственные изменения, которые я сделал, находятся в файле web.config
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1"/>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<bindings>
<basicHttpBinding>
<binding name="secureHttpBinding">
<security mode="Transport">
<transport clientCredentialType="Basic"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="SoapApi.Service1">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="secureHttpBinding"
contract="SoapApi.IService1"/>
<endpoint address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
После публикации службы в локальной файловой системе и настройки IIS. Мне удалось получить доступ к файлу WSDL на сервере после аутентификации из браузера на моем локальном ПК. Но если я пытаюсь добавить службу в простое клиентское приложение с помощью мастера Configure WCF Web Service Reference
из Visual Studio, я получаю следующее сообщение об ошибке:
Metadata contains a reference that cannot be resolved:'http://<host>:<port><path>?wsdl'.
и полное сообщение об ошибке:
An error occurred while attempting to find services at 'http://<host>:<port><path>?wsdl'. The remote server returned an error: (403) Forbidden.
Так как эта ошибка указывает на то, что у меня нет разрешения на доступ, я подумал, почему бы не отключить аутентификацию и попробовать, если она работает. Я активировал анонимный доступ к сайту в IIS и отключил базовую аутентификацию.
Кроме того, я изменил следующий отрывок в файле web.config
:
<basicHttpBinding>
<binding name="secureHttpBinding">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
Я все еще могу получить доступ к файлу WSDL из своего браузера, но, тем не менее, я все еще получаю ту же ошибку при добавлении ссылки на службу к клиенту. То же самое происходит, если я проверяю это через dotnet-svcutil http://<host>:<port><path>?wsdl
Если я пытаюсь добавить сервисную ссылку локально, все работает без проблем.
Дополнительная информация:
- Я уже установил
.NET Framework 4.6
, и это WCF HTTP Activation
обработчик.
- Я добавил разрешение
IIS_IUSRS
в папку, содержащую сервис.
Есть идеи, почему это происходит и что я могу сделать, чтобы решить эту проблему?