Служба WCF + JSONP

У меня есть службы wcf на http://testwcfgrid.atic-solutions.com/, где все работает нормально . Я хочу использовать эту службу в другом приложении с помощью jQuery.ajax, но безуспешно. Мой web.config:

 <system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
</modules>
<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="origin, content-type, accept" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
  </customHeaders>
</httpProtocol>
<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
<system.serviceModel>
<behaviors>
  <endpointBehaviors>
    <behavior name="ProductsAspNetAjaxBehavior">
      <enableWebScript />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="ProductsAspNetAjaxBehavior">
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceMetadata httpGetEnabled="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<standardEndpoints>
  <webScriptEndpoint>
    <standardEndpoint name="" crossDomainScriptAccessEnabled="true"/>
  </webScriptEndpoint>
</standardEndpoints>
<services>
  <service name="Products" behaviorConfiguration="ProductsAspNetAjaxBehavior">
    <endpoint address="" behaviorConfiguration="ProductsAspNetAjaxBehavior" binding="webHttpBinding" contract="Products" />
  </service>
</services>
</system.serviceModel>

мои службы wcf для чтения и создания:

[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json,
              RequestFormat = WebMessageFormat.Json)]
public DataSourceResult Read(int skip, int take, IEnumerable<Sort> sort, Filter filter)
{
    VoziloMassive table = new VoziloMassive();

    return table.GetVehicles().AsQueryable().Select(x => new VoziloViewModel
    {
        Id = x.Id,
        Timestamp = x.Timestamp,
        Marka = x.Marka,
        Registracija = x.Registracija,
        Vrsta = x.Vrsta,
        Flag = x.Flag
    }).ToDataSourceResult(take, skip, sort, filter);
}

[OperationContract]
public IEnumerable<VoziloViewModel> Create(IEnumerable<VoziloViewModel> vehicles)
{
    var result = new List<VoziloViewModel>();

    foreach (var vehicleViewModel in vehicles)
    {
        // Create a new Product entity and set its properties from productViewModel
        var vehicle = new VoziloViewModel
        {
            Marka = vehicleViewModel.Marka,
            Registracija = vehicleViewModel.Registracija
        };

        // store the product in the result
        result.Add(vehicle);

        // Add the entity
        VoziloMassive table = new VoziloMassive();
        table.AddVehicle(vehicle);
    }

    // Return the inserted products - the Kendo Grid needs their ProductID which is generated by SQL server during insertion

    return result.Select(x => new VoziloViewModel
    {
        Id = x.Id,
        Timestamp = x.Timestamp,
        Marka = x.Marka,
        Registracija = x.Registracija,
        Vrsta = x.Vrsta,
        Flag = x.Flag
    })
        .ToList();
}

мой вызов .ajax:

$.ajax({
                        url: "http://testwcfgrid.atic-solutions.com/Products.svc/Read",               
                        dataType: "jsonp",
                        success: function (result) {
                            // notify the data source that the request succeeded
                            options.success(result);
                        },
                        error: function (result) {
                            // notify the data source that the request failed
                            options.error(result);
                        }
                    });

и это ответ: http://prntscr.com/3xxdjw

Что мне здесь не хватает? Я пробовал все... Я использую элементы управления телериком кендо и следовал их примеру.

Спасибо


person Tomislav Trošić    schedule 30.06.2014    source источник
comment
является testwcfgrid.atic-solutions.com/Products.svc/Read действительным, когда вы просматриваете его?   -  person Davie Brown    schedule 30.06.2014


Ответы (1)


Что касается моего предыдущего комментария - не похоже, что URL-адрес действителен для вызова метода Read.

Я думаю, это потому, что вы не указали определение UriTemplate для каждого вызова метода. Также обратите внимание, что тип метода не указан.

Обновите свой метод следующим образом:

[OperationContract]
[WebInvoke(Method = "GET",
           ResponseFormat = WebMessageFormat.Json,
           RequestFormat = WebMessageFormat.Json,
           UriTemplate = "Read")]
public DataSourceResult Read(int skip, int take, IEnumerable<Sort> sort, Filter filter)
person Davie Brown    schedule 30.06.2014
comment
не работает, могу ли я использовать GET, если у меня есть параметры? это пример, которому я следовал, но он работает только в том же домене github.com/telerik/kendo-examples-asp-net/tree/master/ Есть ли живой рабочий пример wcf и jsonp? - person Tomislav Trošić; 01.07.2014
comment
Я нашел этот пример, и он работает codeproject .com/Articles/259832/ протестировано с сеткой кендо - person Tomislav Trošić; 01.07.2014