Использование веб-службы Amazon

В предыдущем разделе было продемонстрировано, как можно использовать веб-службу Google – относительно несложную в обращении, не использующую свои собственные типы данных для входных аргументов и с простым методом, который делает все, что нужно. В этом разделе будет рассматриваться более сложная веб-служба Amazon. Она поддерживает несколько типов, которые все вместе образуют поисковый запрос. И снова нас будут интересовать не конкретные подробности реализации веб-службы Amazon, а способы, которыми ASP.NET AJAX сможет использовать эти данные.

Вам снова понадобится лицензионный ключ (компанияAmazon называет его ключом доступа (access key)). Как и в случае с Google, для этого придется пройти регистрацию. URL сайта с документацией, где можно найти описание ве-службы Amazon: http://www.amazon.com/gp/aws/landing.html. Точно так же как и с ключом Google, вам следует поместить ключ доступа в раздел (appSettings) файла Web.config (ключ компании Amazon имеет длину 20 байт).

Файл примера, который можно загрузить с сайта книги, не содержит этот ключ, поэтому вам необходимо поместить его туда самостоятельно:
(appSettings)
(add key="AmazonAccessKey" value="***" /)
(/appSettings)

Как и в примере Google, следующий шаг заключается в использовании утилиты wsdl.exe для создания класса-посредника из описания вебслужбы Amazon в формате WSDL.


Загрузить WSDL-файл можно по адресу: http://webservices.amazon.com/AWSECommerceService/AWSE-CommerceService.wsdl.

Для создания класса посредника в виде файла AWSECommerceService.cs откройте окно Command (Командная строка) и запустите команду:
wsdl.exe /namespace:Amazon
http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl

Скопируйте получившийся файл .cs в каталог App_Code. Если были получены сообщения об ошибках, что может быть вызвано сбоями в работе сервера, – просто возьмите файл AWSECommerceService.cs из исходных текстов примеров, которые можно загрузить с сайта книги.

Реализация класса-обертки на этот раз выглядит немного сложнее, так как веб-служба использует ряд своих собственных объектов. Создайте файл класса с именем AWSECommerceServiceWrapper.cs в каталоге App_Code. В классе необходимо в первую очередь создать экземпляр класса ItemSearchRequest, посредством которого можно будет передать строку поиска (что искать), индекс поиска (где искать) и группу ответов (количество возвращаемых ответов).

public Amazon.Items Search(string accessKey, string query)
{
ItemSearchRequest searchRequest = new ItemSearchRequest();
searchRequest.Keywords = query;
searchRequest.ResponseGroup = new string[] { "Small" };
searchRequest.SearchIndex = "Books";

Следующий шаг заключается в создании экземпляра класса ItemSearch, посредством которого веб?службе передается ключ доступа и только что созданный объект класса ItemSearchRequest:
ItemSearch search = new ItemSearch();
search.AWSAccessKeyId = accessKey;
search.Request = new ItemSearchRequest[1] { searchRequest };

Наконец, необходимо создать экземпляр главного класса AWSECommerceService и вызвать метод ItemSearch(), передав ему в качестве аргумента объект класса ItemSearch.


Возвращаемые данные представляют собой массив ответов на все переданные поисковые запросы (существует возможность за одно обращение отправить сразу несколько запросов).

Поскольку мы отправляем всего один запрос, то ожидается всего один результат:
AWSECommerceService awse = new AWSECommerceService();
ItemSearchResponse searchResponse = awse.ItemSearch(search);
return searchResponse.Items[0];
}

В примере 18.4 содержится полный код класса AWSECommerceServiceWrapper.cs.
Пример 18.4. Класс?обертка для обращения к веб?службе Amazon
AWSECommerceServiceWrapper.cs
using Amazon;
public class AWSECommerceServiceWrapper
{
public Amazon.Items Search(string accessKey, string query)
{
ItemSearchRequest searchRequest = new ItemSearchRequest();
searchRequest.Keywords = query;
searchRequest.ResponseGroup = new string[] { "Small" };
searchRequest.SearchIndex = "Books";
ItemSearch search = new ItemSearch();
search.AWSAccessKeyId = accessKey;
search.Request = new ItemSearchRequest[1] { searchRequest };
AWSECommerceService awse = new AWSECommerceService();
ItemSearchResponse searchResponse = awse.ItemSearch(search);
return searchResponse.Items[0];
}
}

Остальная часть этого демонстрационного приложения более или менее та же самая, что и в примере с Google.


Файл Amazon.asbx исполняет роль моста к внешней веб-службе. Значение accessKey считывается из файла Web.config, а параметр запроса поступает от клиентского приложения. В примере 18.5 приводится содержимое XML-разметки для файла Amazon.asbx.
Пример 18.5. Мост к веб-службе Amazon
Amazon.asbx




value="% appsettings : AmazonAccessKey %"
serverOnly="true" />





Мало того что отправка данных веб-службе Amazon стала сложнее, получение данных от нее – тоже достаточно трудоемкая процедура. Возвращаемые оберткой данные (массив элементов типа Amazon.Item) содержат список книг. Наиболее интересные данные в этом массиве находятся в еще одном специфическом объекте – свойстве ItemAttributes.

В примере 18.6 демонстрируется страница ASP.NET, которая содержит программный код, извлекающий названия и имена авторов всех книг, удовлетворяющих критериям поиска, и помещающий результаты в элемент
    .

    Пример 18.6. Вызов веб-службы Amazon
    Amazon.aspx
    <%@ Page Language="C#" %>
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1?transitional.dtd"> ASP.NET AJAX


    (body)
    (asp:ScriptManager ID="ScriptManager1" runat="server")

    (asp:ServiceReference Path="~/Amazon.asbx" /)


    (asp:ScriptReference Assembly="Microsoft.Web.Preview"
    Name="PreviewScript.js" /)

    (/asp:ScriptManager)






    0 results.





    (/body)


    Оцените статью: (0 голосов)
    0 5 0

    Статьи из раздела ASP.NET AJAX на эту тему:
    Использование веб-службы Google
    Использование веб-службы Yahoo! (а также REST и XPath)
    Преобразование результатов веб-службы с помощью XSLT