How to natively enable JSONP for existing WCF service?

前端 未结 2 348
天命终不由人
天命终不由人 2020-11-30 11:37

I have a an existing service like the below method:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[Servic         


        
相关标签:
2条回答
  • 2020-11-30 12:27

    Update your config to look like:

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

    See here for a blog post providing a walkthrough of creating a wcf service that's accessible cross-domain.

    This will enable your service to accept requests from cross-domain sources.

    In terms of determining whether to pad your response (the p in jsonp),

    Thanks to @carlosfigueira for this:

    If using .Net 4 JSONP is supported natively. As long as the request has a query string parameter called "callback" (this name can be configured), the response will be padded with the function name .

    Otherwise, you'll need to write a custom message inspector that pads the response appropriately.

    0 讨论(0)
  • 2020-11-30 12:30

    The new JSONP feature is exposed via the WebHttpBinding. The configuration for the CustomersService would looks like this:

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

    Consuming JSONP with jQuery

     // Get the JsonP data
     $.getJSON('http://localhost:65025/CustomersService.svc/GetCustomers?callback=?', null, function (customers) {
          alert('Received ' + customers.length + ' Customers');
     });
    
    0 讨论(0)
提交回复
热议问题