Чтение онлайн

ЖАНРЫ

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

 ...

 return queryResult;

}

Это завершает создание службы Web. Как и прежде, есть возможность протестировать эту службу, направляя браузер Web на файл

.asmx
, поэтому мы можем добавить записи и взглянуть на представление XML для
DataSet
, возвращаемое
GetData
, не создавая никакого клиентского кода.

Клиент приложения предварительного заказа помещения для проведения мероприятия

Используемый клиент является разработкой приложения Web

PCSWebApp3
из предыдущей главы. Назовем это приложение
PCSWebApp4
и воспользуемся кодом из
PCSWebApp3
в качестве начальной точки.

Сделаем два существенных изменения в проекте. Первое: удалим все непосредственные обращения к базе данных из этого приложения и воспользуемся вместо этого службой Web. Второе: введем хранилище уровня приложения из

DataSet
, возвращаемого из службы Web, которое обновляется только в случае необходимости, это значит, что на базу данных падает меньшая нагрузка.

Прежде всего в нашем новом приложении Web необходимо добавить ссылку Web на службу

PCSWebSrv2/Service1.asmx
. Это можно сделать точно таким же образом, как мы видели ранее в этой главе, определяя местонахождение файла
.vsdisco
и вызывая его
eventDataService
.

После этого добавляем код в

Global.asax
, по большей части, таким же образом, как это было сделано для службы Web. Этот код, однако, будет существенно проще. Сначала мы ссылаемся на службу Web и пространство имен
System.Data
:

namespace PCSWebApp4 {

 ...

 using System.Data;

 using eventDataService;

Затем заполняем множество данных (

dataset
) и помещаем его в хранилище данных уровня приложения с именем
ds
:

protected void Application_Start(Object sender, EventArgs e) {

 Service1 dataService = new Service1;

 DataSet ds = dataService.GetData;

 Application["ds"] = ds;

}

Теперь

DataSet
доступно для
всех
экземпляров
PCSWebApp4
, т.е. несколько пользователей могут читать данные без какого-либо обращения к службе Web, то есть к базе данных.

Теперь, когда имеется это

DataSet
, необходимо изменить
WebForm1.aspx.cs
для его использования. Прежде всего можно удалить объявления
oleDbConnection1
,
daAttendees
,
daRooms
и
daEvents
, так как не будет осуществляться никакого обращения к базе данных. Затем необходимо изменить
Page_Load
следующим образом:

private void Page_Load(object sender, System.EventArgs e) {

 validationSummary.Enabled = false;

 foreach (System.Web.UI.WebControls.WebControl validator in this.Validators) {

validator.Enabled = false;

 }

 ds = (DataSet)Application["ds"];

 attendeeList.DataSource = ds.Tables["Attendees"];

 roomList.DataSource = ds.Tables["Rooms"];

 eventTable = ds.Tables["Events"];

 eventDetails1.DataSource = eventTable; eventDetails2.DataSource = eventTable;

 if (!this.IsPostBack) {

System.DateTime trialDate = System.DateTime.Now;

calendar.SelectedDate = getFreeDate(trialDate);

this.DataBind;

 } else {

eventDetails1.DataBind;

eventDetails2.DataBind;

 }

}

Большая

часть кода остается без изменений, необходимо только использовать
Application["ds"]
вместо получения
DataSet
.

Необходимо также изменить

submitButton_Click
для использования метода
AddData
службы Web. В этом случае также большая часть кода остается без изменений:

protected void submitButton_Click(object sender, System.EventArgs e) {

 foreach (System.Web.UI.WebControls.WebControl validator in this.Validators) {

validator.Enabled = true;

 }

 this.Validate;

 if (this.IsValid) {

String attendees = "";

foreach (ListItem attendee in attendeeList.Items) {

if (attendee.Selected) {

attendees += attendee.Text + " (" + attendee.Value + "), ";

}

}

attendees += " and " + nameBox.Text;

String dateString = calendar.SelectedDate.Date.Date.ToShortDateString;

Service1 dataService = new Service1;

int queryResult =

dataService.AddEvent(eventBox.Text, roomList.SelectedItem.Value,

attendees, dateString);

if (queryResult == 1) {

resultLabel.Text = "Event Added";

ds = dataService.GetData;

Application.Lock;

Application["ds"] = da;

eventTable = ds.Tables["Events"];

calendar.SelectedDate = getFreeDate(calendar.SelectedDate.AddDays(1));

eventDetails1.DataSource = eventTable;

eventDetails1.DataBind;

eventDetails2.DataSource = eventTable;

eventDetails2.DataBind;

} else {

resultLabel.Text = "Event not added due to DB access problem.";

}

 } else {

validationSummary.Enabled = true;

 }

}

Фактически, мы существенно упростили систему. Это часто бывает при правильном проектировании служб Web — можно забыть о большей части работы приложения и вместо этого сосредоточиться на работе пользователя.

Поделиться с друзьями: