Две конечные точки в WCF 3.5 для SOAP и JSON - PullRequest
0 голосов
/ 23 апреля 2011

Я не знаю, что я делаю неправильно.У меня есть служба 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);

1 Ответ

1 голос
/ 23 апреля 2011

Это не будет работать.Серверы WSDL только для служб SOAP и являются источником Добавить ссылку на службу в Visual Studio.Вы используете клиентский код, сгенерированный Visual Studio, но используете его с конечной точкой Json, которая не работает.

Конечная точка Json представляет службу REST.Для вызова службы WCF REST в .NET необходимо:

  • Построить вручную HTTP-запрос
  • Поделиться контрактом на обслуживание с клиентом и использовать ChannelFactory или WebChannelFactory для создания прокси
  • Используйте REST Starter KIT CTP2 и его класс HttpClient (не рекомендуется, поскольку разработка REST Starter KIT завершена).
...