Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              JSONP-exemplet visar hur du stöder JSON med utfyllnad (JSONP) i WCF REST-tjänster. JSONP är en konvention som används för att anropa skript mellan domäner genom att generera skripttaggar i det aktuella dokumentet. Resultatet returneras i en angiven återanropsfunktion. JSONP baseras på tanken att taggar som <script src="http://..." > kan utvärdera skript från valfri domän och att skriptet som hämtas av dessa taggar utvärderas inom ett omfång där andra funktioner redan kan vara definierade.
Demonstrerar
Skript mellan domäner med JSONP.
Diskussion
Exemplet innehåller en webbsida som dynamiskt lägger till ett skriptblock när sidan har renderats i webbläsaren. Det här skriptblocket anropar en WCF REST-tjänst som har en enda åtgärd, GetCustomer. WCF REST-tjänsten returnerar kundens namn och adress omsluten i ett namn på återanropsfunktionen. När WCF REST-tjänsten svarar anropas återanropsfunktionen på webbsidan med kunddata och återanropsfunktionen visar data på webbsidan. Inmatningen av skripttaggen och körningen av återanropsfunktionen hanteras automatiskt av kontrollen ASP.NET AJAX ScriptManager. Användningsmönstret är detsamma som med alla ASP.NET AJAX-proxyservrar, med tillägg av en rad för att aktivera JSONP, som visas i följande kod:
var proxy = new JsonpAjaxService.CustomerService();
proxy.set_enableJsonp(true);
proxy.GetCustomer(onSuccess, onFail, null);
Webbsidan kan anropa WCF REST-tjänsten eftersom tjänsten använder WebScriptEndpoint med crossDomainScriptAccessEnabled inställd på true. Båda dessa konfigurationer görs i Web.config-filen under elementet <system.serviceModel> .
<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
  <standardEndpoints>
    <webScriptEndpoint>
      <standardEndpoint name="" crossDomainScriptAccessEnabled="true"/>
    </webScriptEndpoint>
  </standardEndpoints>
</system.serviceModel>
ScriptManager hanterar interaktionen med tjänsten och döljer komplexiteten i att implementera JSONP-åtkomst manuellt. När crossDomainScriptAccessEnabled är inställt på true och svarsformatet för en åtgärd är JSON, inspekterar WCF-infrastrukturen URI:n för begäran efter en frågesträngsparameter för motringning och omsluter JSON-svaret med värdet för frågesträngsparametern för motringning. I exemplet anropar webbsidan WCF REST-tjänsten med följande URI.
http://localhost:33695/CustomerService/GetCustomer?callback=Sys._json0
Eftersom frågesträngsparametern för motringning har värdet JsonPCallbackreturnerar WCF-tjänsten ett JSONP-svar som visas i följande exempel.
Sys._json0({"__type":"Customer:#Microsoft.Samples.Jsonp","Address":"1 Example Way","Name":"Bob"});
Det här JSONP-svaret innehåller kunddata som är formaterade som JSON, omslutna av namnet på den återanropsfunktion som webbplatsen begärde. ScriptManager kör återanropet med hjälp av en skripttagg för att utföra begäran mellan domäner och skickar sedan resultatet till onSuccess-hanteraren som skickades till GetCustomer-åtgärden för ASP.NET AJAX-proxyn.
Exemplet består av två ASP.NET webbprogram: en innehåller bara en WCF-tjänst och en annan innehåller webbsidan .aspx som anropar tjänsten. När du kör lösningen är Visual Studio värd för de två webbplatserna på olika portar, vilket skapar en miljö där tjänsten och klienten finns på olika domäner.
Så här kör du exemplet
- Öppna lösningen för JSONP-exemplet. 
- tryck på F5 för att starta - http://localhost:26648/JSONPClientPage.aspxi webbläsaren.
- Observera att när sidan har lästs in fylls textinmatningarna för "Namn" och "Adress" i med värden. Dessa värden tillhandahölls från ett anrop till WCF-tjänsten efter att webbläsaren hade avslutat renderingen av sidan.