2011-01-14 2 views
1

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

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

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

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

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

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

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

Добавление конфигурации SOAP в мой webconfig также прерывает конечную точку 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> 
+0

Измените свой вопрос, чтобы была видна вся конфигурация. –

ответ

0

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

+0

Сделал это и получил статус HTTP 400. Мне не удалось либо добавить ссылку на службу (SOAP), либо вызвать JSONP EndPoint. Я удалил эту строку: Factory = «System.ServiceModel.Activation.WebServiceHostFactory», из моего .svc-файла и смог добавить Service Reference - однако JSONP все еще не работает. Спасибо за любую помощь ... – obautista

Смежные вопросы