Механизм привязки данных (DataBinding), страница 13

Как видите, XML-документ содержит описание набора данных NorthwindDataSet. Сначала следует описание схемы набора данных и его таблицы Orders, затем сами записи (строки) этой таблицы. Детали описания тегов схемы вы можете найти в наших документах по курсу ADO.NET.

Согласно принятой легенде, рассматриваемый файл автоматически обновляется каким-либо приложением на сервере (например, так: dataSet.WriteXML("Orders.xml");) и содержит самые свежие данные о заказах клиентов. Наша цель: прочесть этот файл, отфильтровать строки в соответствии с запросом (то есть, по полю CustomerID) и отправить их клиенту.

В настоящий момент в проекте MyServices содержится asmx-файл с описанием сервиса, а также файл с кодом его поддержки (с двойным расширением .asmx.cs). Основным отличием Web-сервиса от обычного Web-приложения является логика обработки файла asmx. Переименуйте asmx-файл в OrdersService.asmx и внесите изменения в файл с кодом его поддержки, как показано ниже.

[WebService (Namespace = "http://tempuri.org/",

Description = "Test service for queries to Orders data table from NorthWind database")]

[WebServiceBinding (ConformsTo = WsiProfiles.BasicProfile1_1)]

[ToolboxItem (false)]

public class OrdersService : WebService

{

private DataSet ds = new DataSet ();

[WebMethod (Description="Gets Dataset with the table of orders for a given customer")]

public DataSet GetOrders (string id)

{

ds.ReadXml ("E:/VC8/ADO/NorthWindXML/MyServices/Data/Orders.xml");

DataView view = ds.Tables["Orders"].DefaultView;

view.RowFilter = "CustomerID = '" + id + "'";

ds = new DataSet("OrdersForCustomer");

ds.Tables.Add(view.ToTable ("Orders"));

return ds;

}

}

Скорректируйте файловый путь к XML-документу. Рассмотрим код класса OrdersService. Он происходит от класса WebService и реализует функциональность Web-сервиса. Это означает, что его методы (с атрибутом WebMethod) умеют запаковывать данные в пакеты формата SOAP и отправлять их клиентам. Кроме того, Web-сервисы умеют опубликовывать сигнатуры своих Web-методов так, что они видны клиентам с помощью специальных инструментов, одним из которых является наша студия. Сейчас мы добавим Web Reference (специальную ссылку) на наш Web-сервис в другой проект нашего решения — OrdersClient. Но сначала постройте проект MyServices. Он создаст DLL, специальную ссылку на которую мы и добавим в проектOrdersClient.

¨  В окне Solution Explorer выберите проект OrdersClient, вызовите его контекстное меню и дайте команду Add Web Reference.

¨  В первом окне одноименного мастера выберите гиперссылку Web Services in thissolution. Откроется таблица, в которой должна присутствовать одна строка с именем нашего сервиса: OrdersService.

¨  Нажмите на гиперссылку с именем OrdersService и вы увидите страницу с описанием нашего Web-метода.

¨  Нажмите на гиперссылку с именем Web-метода GetOrders и мастер Add Web Reference запросит ввести параметр, который имеет смысл идентификатора клиента CustomerID.

¨  Введите один из идентификаторов, которые вы видели в файле Orders.xml, например VINET, и нажмите кнопку Invoke. Она запускает (якобы) удаленный Web-метод, который возвращает набор данных, с данными о заказах клиента VINET. Данные были отфильтрованы в коде Web-метода GetOrders. Там же мы присвоили имя набору данных (OrdersForCustomer).

¨  После просмотра Web-страницы с результатом обращения к нашему сервису, вернитесь в диалог мастера и нажмите кнопку Add Reference.

Рассмотренная функциональность Web-сервиса поддерживается файлами: OrdersService.wsdl и OrdersService.disco, которые вы можете увидеть в составе проектаOrdersClient, если нажмете кнопку Show All Files в верхней части окна Solution Explorer. Страница помощи (Service Help page), которую вы видели в начале диалога с мастером, имеет ссылку на документ WSDL (Web Services Description Language). Этот документ можно вызвать и прямо из браузера, если задать адрес в виде: