Wie kann man JSONP für vorhandene WCF-Dienste nativ aktivieren?

  • Ich habe einen bestehenden Dienst wie die folgende Methode:

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

    Ist Es gibt eine einfache Möglichkeit, JSONP-Aufrufe und auch JSON gleichzeitig zuzulassen (zu erkennen). Ist das nativ?

    22 November 2011
    TruMan1
2 answers
  • Aktualisieren Sie Ihre Konfiguration folgendermaßen:

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

    Hier finden Sie einen Blogbeitrag eine Anleitung zum Erstellen eines wcf-Dienstes, auf den domänenübergreifend zugegriffen werden kann.

    Dadurch kann Ihr Dienst Anforderungen von domänenübergreifenden Quellen annehmen.

    Um festzustellen, ob Sie Ihre Antwort auffüllen (das p in jsonp),

    Vielen Dank an @carlosfigueira für das:

    Bei Verwendung von .Net 4 wird JSONP nativ unterstützt. Solange die Anforderung über einen Abfragezeichenfolgeparameter namens "callback" verfügt (dieser Name kann konfiguriert werden), wird die Antwort mit dem Funktionsnamen aufgefüllt.

    Andernfalls müssen Sie einen benutzerdefinierten Meldungsinspektor schreiben, der die Antwort entsprechend auffüllt.

    10 September 2013
    Brad Christie
  • Die neue JSONP-Funktion wird über die WebHttpBinding verfügbar gemacht. Die Konfiguration für den CustomersService würde folgendermaßen aussehen:

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

    JSONP mit jQuery

    verwenden
      // Get the JsonP data
     $.getJSON('http://localhost:65025/CustomersService.svc/GetCustomers?callback=?', null, function (customers) {
          alert('Received ' + customers.length + ' Customers');
     });
     
    25 June 2014
    Rachit Patel