Megosztás a következőn keresztül:


JSONP

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

  1. Nyissa meg a JSONP-minta megoldását.

  2. nyomja le az F5 billentyűt a böngészőben való indításhoz http://localhost:26648/JSONPClientPage.aspx .

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