Layanan WCF + JSONP

Saya memiliki layanan wcf di http://testwcfgrid.atic-solutions.com/ yang semuanya berfungsi dengan baik . Saya ingin menggunakan layanan itu di aplikasi lain dengan jQuery.ajax tetapi tidak berhasil. Web.config saya adalah:

 <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>

layanan wcf saya untuk membaca dan membuat:

[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();
}

panggilan .ajax saya:

$.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);
                        }
                    });

dan ini tanggapannya: http://prntscr.com/3xxdjw

Apa yang kulewatkan di sini? Saya mencoba segalanya... Saya menggunakan kontrol telerik kendo dan saya mengikuti contohnya.

Terima kasih


person Tomislav Trošić    schedule 30.06.2014    source sumber
comment
apakah testwcfgrid.atic-solutions.com/Products.svc/Read valid bila Anda menjelajahinya?   -  person Davie Brown    schedule 30.06.2014


Jawaban (1)


Mengenai komentar saya sebelumnya - sepertinya url tidak valid untuk memanggil metode Baca.

Saya rasa ini karena Anda belum menentukan definisi UriTemplate untuk setiap pemanggilan metode. Perhatikan juga bahwa tipe Metode tidak ditentukan.

Perbarui metode Anda sebagai berikut:

[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
tidak berfungsi, bisakah saya menggunakan GET jika saya memiliki parameter? ini adalah contoh yang saya ikuti tetapi hanya berfungsi pada domain yang sama github.com/telerik/kendo-examples-asp-net/tree/master/ Apakah ada contoh wcf dan jsonp yang berfungsi langsung? - person Tomislav Trošić; 01.07.2014
comment
Saya menemukan contoh ini dan berfungsi codeproject .com/Articles/259832/ diuji dengan kendo grid - person Tomislav Trošić; 01.07.2014