Search code examples
c#asp.netwcfjsonjsonp

How to natively enable JSONP for existing WCF service?


I have a an existing service like the below method:

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

Is there a simple way to allow JSONP calls and also JSON at the same time (detect it). Is this native?


Solution

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