Слева вы видите таблицу клиентов Customers, а справа результат запроса к удаленной таблице заказов Orders. Заказы были получены путем запроса к Web-сервису. Они отфильтрованы по индексу клиента, выбранного в левой таблице. В верхней части окна вы видите элементы управления, синхронизированные (связанные по технологии DataBinding) с данными таблицы Customers. Кроме особенностей разработки и обращения к Web-сервисам мы покажем некоторые другие важные приемы:
¨ Запуск Web-сервиса в рамках отдельного потока, реализованного с помощью нового класса BackgroundWorker.
¨ Использование коллекции типа хэш-таблицы, которую реализует generic-класс Dictionary<TKey,TValue>. Роль ключа будет выполнять название страны (TKey — имеет тип string), а роль значения — изображение флага этой страны (TValue— имеет тип Bitmap). Изображение флага вы видите в верхней части окна.
¨ Создание и введение в проект внедряемых ресурсов (Embedded Resource).
¨ Нестандартный способ перерисовки ячеек DataGridView. Облик ячеек левой таблицы (клиентов) создается в реакции на событие CellPainting класса DataGridView.
Структура нашего решения (solution) будет более сложной, чем ранее, поэтому создайте новое пустое решение (File►New►Project►Other Project Types►Visual Studio Solutions►Blank Solution) с именем NorthWindXML. Добавьте в него проект типа Windows Application с именем OrdersClient. Затем добавьте в решение еще один проект типа ASP.NET Web-service Application с именем MyServices. Последний проект довольно прост с точки зрения логики, котрую следует запрограммировать, но сложен с точки зрения своей скрытой структуры. Его задачей является:
¨ Прочесть данные таблицы Orders, расположенные в файле Orders.xml.
¨ Выбрать из нее строки соответствующие переданному значению поля CustomerID (связанный ключ),
¨ Создать временный DataSet и вложить в него таблицу, состоящую из отфильтрованных строк,
Передача таблицы, точнее, набора данных клиенту осуществляется автоматически. Набор данных сериализуется в XML-поток и вкладывается в конверт (Envelope) XML-протокола, соответствующего формату SOAP (Simple Object Access Protocol). Эту часть задачи решает проект типа Web-сервис почти без нашего участия.
Сначала рассмотрим формат файла Orders.xml. Вы должны взять его из папки нашего курса и поместить в папку Data, которую следует создать внутри папки проекта MyServices.
<?xml version="1.0" standalone="yes"?>
<NorthwindDataSet xmlns="http://tempuri.org/NorthwindDataSet.xsd">
<xs:schema id="NorthwindDataSet" targetNamespace="http://tempuri.org/NorthwindDataSet.xsd"
xmlns:mstns="http://tempuri.org/NorthwindDataSet.xsd"
xmlns="http://tempuri.org/NorthwindDataSet.xsd" mlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified"
elementFormDefault="qualified">
. . . Здесь следует код разметки схемы набора данных NorthwindDataSet с одной таблицей Orders.
</xs:schema>
<Orders>
<OrderID>10248</OrderID>
<CustomerID>VINET</CustomerID>
<EmployeeID>5</EmployeeID>
<OrderDate>1996-07-04T00:00:00-07:00</OrderDate>
<RequiredDate>1996-08-01T00:00:00-07:00</RequiredDate>
<ShippedDate>1996-07-16T00:00:00-07:00</ShippedDate>
<ShipVia>3</ShipVia>
<Freight>32.3800</Freight>
<ShipName>Vins et alcools Chevalier</ShipName>
<ShipAddress>59 rue de l'Abbaye</ShipAddress>
<ShipCity>Reims</ShipCity>
<ShipPostalCode>51100</ShipPostalCode>
<ShipCountry>France</ShipCountry>
</Orders>
<Orders>
. . . Здесь расположены другие строки таблицы Orders.
</Orders>
</NorthwindDataSet>
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.