Чтобы изменить поведение, предлагаемое по умолчанию, вы можете в определения своих типов добавить атрибуты, определенные в пространстве имен System.Xml.Serialization (снова см. главу 17).
public struct SalesInfoDetails {
public string info;
[XmlAttribute]
public DateTime dateExpired;
public string Url;
}
В результате будет получено следующее XML-представление данных.
‹SalesInfoDetails dateExpired="2004-12-02T00:00:00"›
‹info›Цены на Colt снижены на 50%!‹/info›
‹Url›http://www.CarsRUs.com‹/Url›
‹/SalesInfoDetails›
Реализация GetSalesInfoDetails возвращает заполненный массив этой пользовательской структуры.
[WebMethod(Description="Get details of current sales")]
public SalesInfoDetails[] GetSalesInfoDetails {
SalesInfoDetails[] theInfo = new SalesInfoDetails[3];
theInfo[0].info = "Цены на Colt снижены на 50%!";
theInfo[0].dateExpired = DateTime.Parse("12/02/04");
theInfo[0].Url = "http://www.CarsRUs.com";
theInfo[1].info = "Все BMW комплектуются 8-канальным звуком";
theInfo[1].dateExpired = DateTime.Parse("8/11/03");
theInfo[1].Url = "http://www.Bmws4U.com";
theInfo[2].info = "Caravan бесплатно… спросите у дилера!";
theInfo[2].dateExpired = DateTime.Parse("12/01/09");
theInfo[2].Url = "http://www.AllPinkVans.com";
return theInfo;
}
Доступ к типам DataSet ADO.NET
Чтобы завершить создание нашего Web-сервиса XML, вот вам еще един Web-метод, который возвращает DataSet с данными таблицы Inventory базы данных Cars, созданной при изучении ADO.NET в главе 22.
// Получение списка всех машин из таблицы Inventory.
[WebMethod(Description = "Возвращает список машин из таблицы Inventory базы данных Cars")]
pubic DataSet SetCurrentInventory {
// Заполнение DataSet данными таблицы Inventory.
SqlConnection sqlConn = new SqlConnection;
sqlConn.ConnectionString = "data source=localhost;initial catalog=Cars;uid=sa;pwd=";
SqlDataAdapter myDA= new SqlDataAdapter("Select * from Inventory", sqlConn);
DataSet ds = new DataSet;
myDA.Fill(ds
return ds;
}
Исходный код. Файлы примера CarsSalesInfoWS размещены в подкаталоге, соответствующим главе 25.
Клиент Windows Forms
Чтобы проверить работу нового Web-сервисa XML, создайте приложение Windows Forms и укажите в нем ссылку на CarsSalesInfoWS, используя диалоговое окно Add Web Reference в Visual Studio 2005 (рис. 25.7).
Pиc. 25.7. Добавление ссылки на CarsSalesInfoWS
Теперь просто используйте генерируемый агент для вызова доступных Web-методов. Вот один из возможных вариантов реализации формы.
using CarsSalesInfoCLient.localhost;
…
namespace CarsSalesInfoClient {
public partial class MainWindow: Farm {
private CarSalesInfoWS ws = new CarSalesInfoWS;
…
private void MainWindow_Load(object sender, EventArgs e) {
// Привязка к таблице.
inventoryDataGridView.DataSource = ws.GetCurrentInventory.Tables[0];
}
private void btnGetTagLines_Click(object sender, EventArgs e) {
string[] tagLines = ws.GetSalesTagLines;
foreach (string tag in tagLines) listBoxTags.Items.Add(tag);
}
private void btnGetAllDetails_Click (object sender, EventArgs e) {