Сбой службы WCF с несколькими привязками webHttpBinding в тестовом клиенте Visual Studio
У меня есть служба с четырьмя определенными конечными точками, конфигурация выглядит так:
<service name="Systembolaget.Services.ButikService" behaviorConfiguration="default">
<endpoint
address="xml"
binding="webHttpBinding"
behaviorConfiguration="xml"
contract="Systembolaget.Contracts.Butiker.IButikService" />
<endpoint
address="json"
binding="webHttpBinding"
behaviorConfiguration="json"
contract="Systembolaget.Contracts.Butiker.IButikService" />
<endpoint
address="soap"
binding="basicHttpBinding"
contract="Systembolaget.Contracts.Butiker.IButikService"
bindingConfiguration="default"/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
<behaviors>
<endpointBehaviors>
<behavior name="xml">
<webHttp defaultOutgoingResponseFormat="Xml" defaultBodyStyle="Bare"></webHttp>
</behavior>
<behavior name="json">
<webHttp defaultOutgoingResponseFormat="Json" defaultBodyStyle="Bare"></webHttp>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="default">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
При использовании сервиса с любой из конечных точек все работает нормально. Однако я не могу использовать тестовый клиент в Visual Studio 2012, если существует конечная точка xml и json. Если я закомментирую одно или другое, клиент будет работать, если я сохраню оба в файле конфигурации, я получу следующую ошибку:
Ошибка: невозможно получить метаданные из
http://localhost:52832/VarugruppService.svc
Если это служба Windows (R) Communication Foundation, к которой у вас есть доступ, убедитесь, что вы включили публикацию метаданных по указанному адресу. Для получения справки о включении публикации метаданных, пожалуйста, обратитесь к документации MSDN по адресуhttp://go.microsoft.com/fwlink/?LinkId=65455
Обмен метаданными.WS
URI:http://localhost:52832/VarugruppService.svc
Метаданные содержат ссылку, которая не может быть разрешена:http://localhost:52832/VarugruppService.svc
,
Там не было конечной точки прослушиванияhttp://localhost:52832/VarugruppService.svc
что может принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. Смотрите InnerException, если имеется, для более подробной информации.
Удаленный сервер возвратил ошибку: (404) Not Found.HTTP GET Error
URI:http://localhost:52832/VarugruppService.svc
При загрузке произошла ошибкаhttp://localhost:52832/VarugruppService.svc
".
Запрос не выполнен с состоянием HTTP 404: не найдено.
Есть идеи?
1 ответ
Вы можете добиться этого, добавив отдельную конфигурацию привязки для каждого webHttpBindng:
<bindings>
<webHttpBinding>
<binding name="xmlWebBinding">
</binding>
<binding name="jsonWebBinding">
</binding>
</webHttpBinding>
</bindings>
<services>
<service name="Systembolaget.Services.ButikService" behaviorConfiguration="default">
<endpoint
address="xml"
binding="webHttpBinding"
bindingConfiguration="xmlWebBinding"
behaviorConfiguration="xml"
contract="Systembolaget.Contracts.Butiker.IButikService" />
<endpoint
address="json"
binding="webHttpBinding"
bindingConfiguration="jsonWebBinding"
behaviorConfiguration="json"
contract="Systembolaget.Contracts.Butiker.IButikService" />
<endpoint
address="soap"
binding="basicHttpBinding"
contract="Systembolaget.Contracts.Butiker.IButikService"
bindingConfiguration="default"/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="xml">
<webHttp defaultOutgoingResponseFormat="Xml" defaultBodyStyle="Bare"></webHttp>
</behavior>
<behavior name="json">
<webHttp defaultOutgoingResponseFormat="Json" defaultBodyStyle="Bare"></webHttp>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="default">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
Благодарю ответчика внизу этого форума: