<?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.
Найдено здесь и здесь.
Комментариев нет:
Отправить комментарий