Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В примере JSONP показано, как поддерживать JSON с заполнением (JSONP) в службах REST WCF. JSONP — это соглашение, используемое для вызова междоменных скриптов путем создания тегов скриптов в текущем документе. Результат возвращается через указанную функцию обратного вызова. JSONP основан на идее, что теги, такие как <script src="http://..." > могут оценивать скрипты из любого домена, и скрипт, полученный этими тегами, оценивается в области, в которой уже могут быть определены другие функции.
Демонстрирует
Междоменное скриптовое выполнение с использованием JSONP.
Обсуждение
Пример включает веб-страницу, которая динамически добавляет блок скрипта после визуализации страницы в браузере. Этот блок скрипта вызывает службу REST WCF, которая имеет одну операцию. GetCustomer Служба REST WCF возвращает имя и адрес клиента, завернутые в имя функции обратного вызова. Когда служба REST WCF отвечает, функция обратного вызова на веб-странице вызывается с данными клиента, а функция обратного вызова отображает данные на веб-странице. Внедрение тега скрипта и выполнение функции обратного вызова автоматически обрабатывается элементом управления ASP.NET AJAX ScriptManager. Шаблон использования совпадает со всеми ASP.NET прокси-серверами AJAX с добавлением одной строки для включения JSONP, как показано в следующем коде:
var proxy = new JsonpAjaxService.CustomerService();
proxy.set_enableJsonp(true);
proxy.GetCustomer(onSuccess, onFail, null);
Веб-страница может вызывать службу REST WCF, потому что служба использует WebScriptEndpoint с crossDomainScriptAccessEnabled, установленным на true. Обе эти конфигурации выполняются в файле Web.config в элементе <system.serviceModel> .
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<standardEndpoints>
<webScriptEndpoint>
<standardEndpoint name="" crossDomainScriptAccessEnabled="true"/>
</webScriptEndpoint>
</standardEndpoints>
</system.serviceModel>
ScriptManager управляет взаимодействием со службой и скрывает сложность реализации доступа JSONP вручную. Если для crossDomainScriptAccessEnabled установлено значение true, и формат ответа для операции — JSON, инфраструктура WCF проверяет URI запроса на наличие параметра строки обратного вызова и оборачивает JSON-ответ значением этого параметра. В примере веб-страница вызывает службу REST WCF со следующим унифицированным указателем ресурса (URI).
http://localhost:33695/CustomerService/GetCustomer?callback=Sys._json0
Так как параметр строки запроса обратного вызова имеет значение JsonPCallback, служба WCF возвращает ответ JSONP, показанный в следующем примере.
Sys._json0({"__type":"Customer:#Microsoft.Samples.Jsonp","Address":"1 Example Way","Name":"Bob"});
Этот ответ JSONP включает данные клиента, отформатированные как JSON, завернутые именем функции обратного вызова, запрошенной веб-страницей. ScriptManager выполнит этот обратный вызов с помощью тега скрипта для выполнения запроса между доменами, а затем передает результат обработчику onSuccess, переданному в операцию GetCustomer прокси-сервера ASP.NET AJAX.
Пример состоит из двух веб-приложений ASP.NET: один содержит только службу WCF, а другой — веб-страницу .aspx, которая вызывает службу. При запуске решения Visual Studio будет размещать два веб-сайта на разных портах, что создает среду, в которой служба и клиент живут в разных доменах.
Запуск примера
Откройте решение для примера JSONP.
Нажмите клавишу F5 , чтобы запустить
http://localhost:26648/JSONPClientPage.aspxв браузере.Обратите внимание, что после загрузки страницы текстовые входные данные для "Имя" и "Адрес" заполняются значениями. Эти значения были предоставлены из вызова службы WCF после завершения отрисовки страницы в браузере.