Чтобы изменить поведение, предлагаемое по умолчанию, вы можете в определения своих типов добавить атрибуты, определенные в пространстве имен 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;

}

<p>Доступ к типам DataSet ADO.NET</p>

Чтобы завершить создание нашего 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, "Inventorу");

 return ds;

}

Исходный код. Файлы примера CarsSalesInfoWS размещены в подкаталоге, соответствующим главе 25.

<p>Клиент Windows Forms</p>

Чтобы проверить работу нового 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) {

Перейти на страницу:

Похожие книги