Посетите блог Гила Финка, посвященный объединению служб данных WCF, JSONP и jQuery
http://blogs.microsoft.co.il/blogs/gilf/archive/2011/04/24/combining-wcf-data-services-jsonp-and-jquery.aspx
Во время сеанса Майка Фласко в MIX11 он показал, как создать службу данных WCF с поддержкой JSONP с атрибутом JSONPSupportBehavior, доступным для загрузки из галереи кода MSDN (и предполагается быть частью пространства имен Microsoft.Data.Services.Extensions). В этом посте я покажу простой пример использования атрибута и jQuery для выполнения междоменного вызова JSONP для службы данных WCF.
Настройка среды
Сначала я начал с создания двух разных веб-приложений ASP.NET. Первое приложение включает в себя страницу вызова, а второе - Службу данных WCF. Затем я создал во втором веб-приложении модель Entity Framework и службу данных WCF из этой модели. Я также добавил класс JSONPSupportBehavior.cs, который существует в ссылке , предоставленной ранее. Класс включает в себя реализацию JSONPSupportBehavior, которая реализует интерфейс WCF IDispatchMessageInspector. Также он включает JSONPSupportBehaviorAttribute, который я использую в своем коде. Код прост и выглядит так:
[JSONPSupportBehavior]
public class SchoolDataService : DataService<SchoolEntities>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
Выполнение вызова JSONP
Во втором веб-приложении я создал веб-форму, которая будет содержать пример вызова JSONP. Вот код, который делает звонок:
<!DOCTYPE html>
<html>
<head runat="server">
<title>JSONP Call</title>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js" type="text/javascript"></script>
</head>
<body>
<form id="form1" runat="server">
<output id="result">
</output>
</form>
<script type="text/javascript">
$.getJSON('http://localhost:23330/SchoolDataService.svc/Courses?$format=json&$callback=?',
function (response) {
$.each(response.d, function (index, value) {
var div = document.createElement('div');
div.innerHTML = value.Title;
$('#result').append(div);
})
});
</script>
</body>
</html>
Давайте рассмотрим код веб-формы:
Сначала я использую Microsoft CDN, чтобы получить библиотеку jQuery. Затем я создал элемент вывода HTML5, чтобы добавить к нему вывод вызова. В основном скрипте я использую функцию jJuery getJSON, которая вызывает службу данных WCF. Обратите внимание, что для получения ответа JSON от службы данных WCF необходимо использовать параметр строки запроса $ format = json. После извлечения данных я выполняю итерацию и создаю элемент div для каждого полученного заголовка курса. Это делается в функции успеха, которую я связал при вызове функции getJSON. Вот результат выполнения кода:
Резюме
В этой статье я привел простой пример выполнения вызова JSONP в Службу данных WCF с использованием jQuery. Такое решение может помочь вам использовать службы данных WCF, которые существуют в других доменах со стороны клиента. В следующем посте я покажу тот же пример, используя новую datajs library