<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="GeneralBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="WcfTest.Core.TalkingService" behaviorConfiguration="GeneralBehavior">
<endpoint address="" binding="basicHttpBinding" contract="WcfTest.Core.ITalkingService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<directoryBrowse enabled="true" />
</system.webServer>
</configuration>
Служба хостится в IIS по адресу http://localhost/WcfTest.IISHost/TalkingService.svc. Заходим браузером на этот адрес и видим сообщение, поясняющее, что мы можем сделать с этой службой. В сообщение предлагается получить WSDL, перейдя по ссылке http://localhost/WcfTest.IISHost/TalkingService.svc?wsdl. Это работает, именно для этого был использован httpGetEnabled.
Однако при попытке перейти по адресу http://localhost/WcfTest.IISHost/TalkingService.svc/mex, указанному в MEX endpoint, мы получим от сервера ошибку HTTP 400 Bad request. Почему, мы же разрешили MEX? Плюс WCFTestClient нормально работает с этим адресом.
Дело в том, что mexHttpBinding использует SOAP и ожидает POST запрос, поэтому к нему нельзя обратиться через браузер. Единственный способ получить браузером WSDL - использовать параметр ?wsdl.
Найдено здесь и здесь.
Комментариев нет:
Отправить комментарий