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'];

 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 + '), ';

   }

  }

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ОБРАНЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату