Я не знаю, что я делаю неправильно.У меня есть служба WCF (.NET 3.5) (JsonSoap.svc), которая имеет две конечные точки для типов содержимого soap и json.Обе конечные точки относятся к одному и тому же сервису.Я использую только одну конечную точку Json в клиенте.Моя цель состоит в том, чтобы метод службы GetPerson () возвращал Json или soap в зависимости от конечных точек, используемых для подключения к службе (возможно, это возможно в WCF?).Я вижу wsdl и смог успешно добавить ссылку на службу на клиентскую сторону.
Я получаю следующую ошибку после вызова GetPerson () -
«Произошла ошибка при получении ответа HTTP на http://localhost:80/JsonSoap/json/GetPerson. Это может быть связано с тем, что привязка конечной точки службы не использует протокол HTTP. Это также может быть связано с тем, что сервер прерывает контекст запроса HTTP (возможно, из-зазавершение работы службы). См. журналы сервера для получения дополнительной информации. "
Конфигурация службы WCF
<!-- bindings -->
<bindings>
<basicHttpBinding>
<binding name ="soapBinding">
<security mode="None">
</security>
</binding>
</basicHttpBinding>
<webHttpBinding>
<binding name="webBinding">
</binding>
</webHttpBinding>
</bindings>
<!-- JSON behaviors -->
<endpointBehaviors>
<behavior name="jsonBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="defaultBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="TestService.IJsonSoap" behaviorConfiguration="defaultBehavior">
<host>
<baseAddresses>
<!-- note, choose an available port-->
<add baseAddress="http://localhost:80/JsonSoap" />
</baseAddresses>
</host>
<endpoint address="soap" binding="basicHttpBinding"
bindingConfiguration="soapBinding"
contract="TestService.IJsonSoap" />
<endpoint address="json" binding="webHttpBinding"
bindingConfiguration="webBinding"
behaviorConfiguration="jsonBehavior"
contract="TestService.IJsonSoap" />
</service>
Код WCF:
[OperationContract]
[WebGet]
Person GetPerson(int ID);
Конфигурация клиента WCF:
<endpoint address="http://localhost:80/JsonSoap/json" binding="webHttpBinding"
bindingConfiguration="webBinding" behaviorConfiguration="jsonBehavior"
contract="MyService.IJsonSoap" />
Код клиента:
MyService.JsonSoapClient service = new JsonSoapClient();
MyService.Person person = service.GetPerson(10);