Доступ к JSONP из WCF через JQuery - PullRequest
0 голосов
/ 27 января 2012

У меня были некоторые проблемы с получением данных JSON из приложения-службы WCF, которое я создал.У меня есть простой сервис WCF, который возвращает следующий JSON:

[{"RoomId":1,"RoomName":"Big Room"},{"RoomId":2,"RoomName":"Medium Room"},{"RoomId":3,"RoomName":"Small Room"}]

Я пытаюсь получить доступ к этим данным из веб-приложения, используя JQuery.Я пробовал различные операторы JQuery, чтобы попытаться получить данные, но ничего не появляется.Вот моя самая последняя попытка:

$(function () {
    $.getJSON('http://localhost:6188/RoomBookingService.svc/GetRooms?callback=Rooms', function (data) {
        alert(data);
    });

Ниже приведен код моего приложения службы WCF:

[ServiceContract]
public interface IRoomBookingService
{
    [OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare,ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetRooms")]

    Room[] GetRooms();

Конфиг:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web> 
  <system.serviceModel>
    <services>
      <service name="RoomBookingServices.RoomBookingService" behaviorConfiguration="RoomBookingServiceBehaviour">
        <endpoint address="" binding="webHttpBinding" bindingConfiguration="webHttpBindingWithJsonP" contract="RoomBookingServices.IRoomBookingService" behaviorConfiguration="webHttpBehavior">
        </endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="RoomBookingServiceBehaviour">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>      
      <endpointBehaviors>
        <behavior name="webHttpBehavior">
         <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <webHttpBinding>
        <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
      </webHttpBinding>
    </bindings>  
    <!--<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />-->
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

Все, что мне нужноJQuery, чтобы сделать, это вернуть JSON и отобразить его в теге div или что-то, как позже он будет отформатирован.Любая помощь будет отличной.

Заранее спасибо.

1 Ответ

2 голосов
/ 27 января 2012

Я полагаю, что в типичных случаях использования вызовов jsonp с WCF параметр обратного вызова назначается в виде знака вопроса.

$(function () {
    $.getJSON('http://localhost:6188/RoomBookingService.svc/GetRooms?callback=?', function (data) {
       alert(data);
});

Затем метод jQuery getJSON заменит вопросительный знак динамически генерируемой функцией javascript для обработки обратного вызова JSONP

Подробнее об этом см. В статье .

...