Службы WCF с конечными точками JSON, JSONP и SOAP - PullRequest
1 голос
/ 14 января 2011

Я настроил традиционные службы WCF, используя конечные точки SOAP.В моем клиентском проекте я добавил ссылку на сервис и т. Д. Они работают как положено.

Я создал службу WCF с поддержкой JSONP, внес изменения в файл .svc, веб-конфигурацию и т. Д. Я создал тестовую страницу клиента для тестирования.Я успешно звоню в службу JSONP.

Однако изменения, внесенные в веб-конфигурацию, нарушили ссылку на службу для служб SOAP.Я хотел бы использовать оба типа конечных точек.Я не уверен, как настроить службы и веб-конфигурации.

Если http получает только, может ли каждая операция (независимо от того, предназначена ли она для SOAP или JSONP) быть украшена: [WebGet(ResponseFormat = WebMessageFormat.Json)]

Тогда мой класс обслуживания должен: [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

Когда я сейчас пытаюсь обновить ссылку на службу в моем клиентском проекте, я получаю

Экземпляр привязки уже был связан для прослушивания URI 'http://flixsit:1000/FlixsitWebServices.svc'. Если две конечные точки хотят совместно использовать один и тот жеListenUri, они также должны использовать один и тот же экземпляр объекта привязки.Две конфликтующие конечные точки были либо указаны в вызовах AddServiceEndpoint (), либо в файле конфигурации, либо в комбинации AddServiceEndpoint () и config.

Добавление конфигурации SOAP в мою веб-конфигурацию также нарушает конечную точку JSONP.Вызов JSONP на стороне клиента не требует ссылки на службу клиента (или генерации прокси), но SOAP делает это правильно?

My Service WebConfig:

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="webHttpBehavior">
        <webHttp />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="DefaultBehaviors">          
        <serviceMetadata httpGetEnabled="true" />          
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
    <webHttpBinding>
      <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
    </webHttpBinding>
    <basicHttpBinding>
      <binding name="BasicHttpEndpointBinding" />
    </basicHttpBinding>
  </bindings>
  <services>
    <service name="Flixsit.Services.FlixsitWebServices" behaviorConfiguration="DefaultBehaviors">
      <endpoint name="JSONPEndPoint" address=""
                                   binding="webHttpBinding"
                                   bindingConfiguration="webHttpBindingWithJsonP"
                                   contract="Flixsit.Services.IFlixsitWebServices"
                                   behaviorConfiguration="webHttpBehavior" />
      <endpoint name="HttpEndPoint"  address=""
                                   binding="basicHttpBinding"
                                   contract="Flixsit.Services.IFlixsitWebServices" />
      <host>
        <baseAddresses>
          <add baseAddress="http://Flixsit:1000/FlixsitWebServices.svc" />
        </baseAddresses>
      </host>
    </service>
  </services>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

1 Ответ

0 голосов
/ 14 января 2011

Ошибка ясно описывает проблему.У вас есть две конечные точки с одинаковым адресом, но разными привязками.Это не разрешено.Установите адрес = "jsonp" в конечной точке с привязкой webHttpBinding.Вы позвоните конечной точке на /Service.svc/jsonp

...