Как видите, 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). Этот документ можно вызвать и прямо из браузера, если задать адрес в виде:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.