Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A JSONP-minta bemutatja, hogyan támogatható a JSON padding (JSONP) a WCF REST-szolgáltatásokban. A JSONP egy konvenció, amellyel tartományközi szkripteket hívhat meg, ha szkriptcímkéket hoz létre az aktuális dokumentumban. Az eredményt egy megadott visszahívási függvény adja vissza. A JSONP azon az elképzelésen alapul, hogy az olyan címkék, mint <script src="http://..." > szkripteket értékelhetnek ki bármely domenből, és a címkék által lekért szkript kiértékelése olyan hatókörön belül történik, amelyben más függvények már definiálva lehetnek.
Megmutatja
Tartományközi szkriptelés JSONP-vel.
Megbeszélés
A minta tartalmaz egy weblapot, amely dinamikusan hozzáad egy szkriptblokkot a lap böngészőben való megjelenítése után. Ez a szkriptblokk meghív egy WCF REST szolgáltatást, amely egyetlen művelettel rendelkezik. GetCustomer A WCF REST szolgáltatás visszaadja az ügyfél nevét és címét egy visszahívási függvény neveként. Amikor a WCF REST szolgáltatás válaszol, a rendszer meghívja a visszahívási függvényt a weblapon az ügyféladatokkal, a visszahívási függvény pedig megjeleníti az adatokat a weblapon. A szkriptcímke injektálását és a visszahívási függvény végrehajtását automatikusan az AJAX ScriptManager vezérlő ASP.NET kezeli. A használati minta ugyanaz, mint az összes ASP.NET AJAX-proxynál, és egy sor hozzáadásával engedélyezi a JSONP-t, ahogy az alábbi kódban is látható:
var proxy = new JsonpAjaxService.CustomerService();
proxy.set_enableJsonp(true);
proxy.GetCustomer(onSuccess, onFail, null);
A weblap meghívhatja a WCF REST szolgáltatást, mert a szolgáltatás a WebScriptEndpoint-t használja, amelynek crossDomainScriptAccessEnabledtrue-re van állítva. Mindkét konfiguráció a system.serviceModel< elem alatti >Web.config fájlban történik.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<standardEndpoints>
<webScriptEndpoint>
<standardEndpoint name="" crossDomainScriptAccessEnabled="true"/>
</webScriptEndpoint>
</standardEndpoints>
</system.serviceModel>
A ScriptManager kezeli a szolgáltatással való interakciót, és elrejti a JSONP-hozzáférés manuális implementálásának összetettségét. Ha crossDomainScriptAccessEnabled be van állítva true , és egy művelet válaszformátuma JSON, a WCF-infrastruktúra ellenőrzi a visszahívási lekérdezési sztring paraméterére vonatkozó kérés URI-ját, és a JSON-választ a visszahívási lekérdezési sztring paraméter értékével burkolja. A mintában a weblap az alábbi URI-val hívja meg a WCF REST szolgáltatást.
http://localhost:33695/CustomerService/GetCustomer?callback=Sys._json0
Mivel a visszahívási lekérdezési sztring paraméter értéke JsonPCallback, a WCF szolgáltatás az alábbi példában látható JSONP-választ adja vissza.
Sys._json0({"__type":"Customer:#Microsoft.Samples.Jsonp","Address":"1 Example Way","Name":"Bob"});
Ez a JSONP-válasz tartalmazza a JSON-ként formázott ügyféladatokat, amelyek a weblap által kért visszahívási függvény nevével vannak becsomagolva. A ScriptManager egy szkriptcímkével hajtja végre ezt a visszahívást a tartományközi kérés végrehajtásához, majd átadja az eredményt a ASP.NET AJAX-proxy GetCustomer műveletének átadott onSuccess kezelőnek.
A minta két ASP.NET webalkalmazásból áll: az egyik csak egy WCF szolgáltatást tartalmaz, a másik pedig a .aspx weblapot, amely meghívja a szolgáltatást. A megoldás futtatásakor a Visual Studio a két webhelyet különböző portokon fogja üzemeltetni, ami egy olyan környezetet hoz létre, amelyben a szolgáltatás és az ügyfél különböző tartományokban él.
Minta futtatása
Nyissa meg a JSONP-minta megoldását.
nyomja le az F5 billentyűt a böngészőben való indításhoz
http://localhost:26648/JSONPClientPage.aspx.Figyelje meg, hogy az oldal betöltése után a "Név" és a "Cím" szövegbevitelét értékek töltik ki. Ezeket az értékeket a WCF szolgáltatás hívása szolgáltatta, miután a böngésző befejezte az oldal megjelenítését.