Как включить JSONP для существующей службы WCF? - PullRequest
6 голосов
/ 22 ноября 2011

У меня есть существующий сервис, подобный приведенному ниже методу:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
public class SomeService : ISomething
{
    public SomeListResults SomeList(SomeParams someParams)
    {
          ....
    }
}

Существует ли простой способ разрешить вызовы JSONP и одновременно JSON (обнаружить его).Это родной?

Ответы [ 2 ]

9 голосов
/ 22 ноября 2011

Обновите вашу конфигурацию, чтобы она выглядела так:

<configuration>
  <system.web>
    <compilation debug="true" targetframework="4.0">
    <authentication mode="None">
  </authentication></compilation></system.web>
  <system.webserver>
    <modules runallmanagedmodulesforallrequests="true">
  </modules></system.webserver>
  <system.servicemodel>
    <servicehostingenvironment **aspnetcompatibilityenabled**="true">
    <standardendpoints>
      <webscriptendpoint>
        <standardendpoint **crossdomainscriptaccessenabled**="true" name="">
      </standardendpoint></webscriptendpoint>
    </standardendpoints>
  </servicehostingenvironment></system.servicemodel>
</configuration>

См. Здесь сообщение в блоге , в котором описывается создание службы wcf, доступной для междоменных доменов.

Это позволит вашему сервису принимать запросы из междоменных источников.

С точки зрения определения, дополнить ли ваш ответ (p в jsonp),

Спасибо @carlosfigueira за это:

Если используется .Net 4, JSONP поддерживается изначально. Пока запрос имеет параметр строки запроса, называемый «обратный вызов» (это имя можно настроить), ответ будет дополнен именем функции ,

В противном случае вам потребуется написать собственный инспектор сообщений, который соответствующим образом дополнит ответ.

2 голосов
/ 25 июня 2014

Новая функция JSONP предоставляется через WebHttpBinding.Конфигурация для CustomerService будет выглядеть следующим образом:

 <bindings>
    <webHttpBinding>
      <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
    </webHttpBinding>
  </bindings>
  <services>
    <service name="ServiceSite.CustomersService">
      <endpoint address="" binding="webHttpBinding"
                bindingConfiguration="webHttpBindingWithJsonP" contract="ServiceSite.CustomersService"
                behaviorConfiguration="webHttpBehavior"/>
    </service>
  </services>

Использование JSONP с jQuery

 // Get the JsonP data
 $.getJSON('http://localhost:65025/CustomersService.svc/GetCustomers?callback=?', null, function (customers) {
      alert('Received ' + customers.length + ' Customers');
 });
...