Ватсон Карли
Шрифт:
[WebMethod]
public int AddEvent(String eventName, String eventRoom, String eventAttendees, String eventDate) {
...
int queryResult = insertCommand.ExecuteNonQuery;
if (queryResult == 1) {
daEvents =
new System.Data.OleDb.OleDbDataAdapter(
"SELECT * FROM Events", oleDbConnection1);
Application.Lock;
ds = (DataSet) Application["ds"];
ds.Tables["Events"].Clear;
daEvents.Fill(ds, "Events");
Application["ds"] = ds;
Application.UnLock;
oleDbConnection1.Close;
}
}
Наконец, мы возвращаем
queryResult
, позволяя клиенту узнать, что запрос был успешным: [WebMethod]
public int AddEvent(String eventName, String eventRoom, String eventAttendees, String eventDate) {
...
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"];