Симон Робинсон - C# для профессионалов. Том II
- Название:C# для профессионалов. Том II
- Автор:
- Жанр:
- Издательство:Лори
- Год:2003
- Город:Москва
- ISBN:5-85582-187-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Симон Робинсон - C# для профессионалов. Том II краткое содержание
Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.
В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.
Для кого предназначена эта книгаЭта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.
Основные темы книги• Все особенности языка C#
• C# и объектно-ориентированное программирование
• Приложения и службы Windows
• Создание web-страниц и web-служб с помощью ASP NET
• Сборки .NET
• Доступ к данным при помощи ADO NET
• Создание распределённых приложений с помощью NET Remoting
• Интеграция с COM, COM+ и службой Active Directory
C# для профессионалов. Том II - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
При использовании утилиты WSDL.exe
создается файл .cs
, содержащий класс прокси на основе описания WSDL службы Web. Мы определяем это с помощью URL, например:
WSDL http://localhost/PCSWebSrv1/Service1.asmx?WSDL
Для примера из последнего раздела эта утилита создаст файл с именем Service1.cs
класса прокси. Класс называется по имени cлужбы Web, в данном случае Service1
, и будет содержать методы, которые вызывают идентично названные методы службы. Чтобы использовать этот класс, мы просто добавляем файл .cs
, созданный для проекта, и используем следующий код:
Service1 myService = new Service1();
String result = myService.CanWeFixIt();
По умолчанию созданный класс будет помещен в корневое пространство имен, поэтому не нужен никакой оператор using
, но можно определить для использования другое пространство имен с помощью параметра командной строки /n утилиты WSDL.exe.
Эта техника хорошо работает, но может оказаться неудобным непрерывно переделывать код, если служба разрабатывается и постоянно изменяется. Конечно, можно было бы делать это в режиме сборки проекта, чтобы автоматически обновлять созданный прокси перед каждой компиляцией, но существует способ лучше.
Мы проиллюстрируем его в новом приложении Web с именем PCSWebClient1
, создавая клиента для примера из последнего раздела. В теле формы на созданной странице .aspx
необходимо заменить существующее объявление form на следующий код:
Соединим обработчик события нажатия кнопки со службой Web. Для начала добавим в проект ссылку на службу Web. Чтобы сделать это, щелкнем правой кнопкой мыши на приложении в Solution Explorer и выберем пункт Add Web Reference… В появившемся окне введем URL файла .vsdisco
службы Web:

Здесь можно следовать по ссылкам справа, чтобы получить те же самые описания с границы Web службы, которые мы видели в предыдущем разделе, и добавить ссылку с помощью кнопки Add Reference Нажатие на эту кнопку приведет к следующим изменениям в Solution Explorer:

Папка, содержащая нашу ссылку Web, называется по имени сервера, где расположена служба, в данном случае — localhost
. Это также пространство имен, на которое необходимо ссылаться, чтобы использовать класс прокси, поэтому имеет смысл переименовать папку, что можно сделать с помощью щелчка правой кнопкой мыши на папке. Если переименовать эту папку в myWebService
и добавить инструкцию using
в код…
using PCSWebClient1.myWebService;
…то тогда можно будет использовать службу в нашем классе.
Добавим обработчик событий к кнопке на форме с помощью следующего кода:
protected void triggerButton_Сlick(object sender, System.EventArgs e) {
Service1 myService = new Service1();
resultLabel.Text = myService.CanWeFixIt();
}
Нажатие кнопки во время выполнения приложения приведет к выводу CanWeFixIt()
в окне браузера.
Служба Web может впоследствии измениться, но с помощью такого метода можно просто сделать щелчок правой кнопкой мыши на ссылке Web в проводнике сервера и выбрать Update Web Reference. Это создаст для нас новый класс прокси.
Расширение примера заказа помещения для проведения мероприятий
Теперь, когда мы знакомы с основами создания и использования служб Web, давайте применим наши знания, расширив приложение заказа помещения для проведения мероприятий из предыдущей главы. В частности, извлечем детали доступа к базе данных из приложения и поместим их в службу Web. Эта служба Web имеет два метода:
□ GetData()
, который будет возвращать объект DataSet
, содержащий все три таблицы базы данных PCSWebApp3
.
□ AddEvent()
, добавляющий событие и возвращающий обновленную версию DataSet
, которая включает изменение
Кроме того, мы создадим службу Web, помня о некоторых приемах сокращения нагрузки из предыдущей главы. В частности, мы будем хранить DataSet
на уровне приложения в приложении службы Web. Это означает, что несколько запросов данных не потребуют работы дополнительных запросов к базе данных. Данные в этом DataSet
уровня приложения обновятся, когда в базу данных добавятся новые данные. Это означает, что изменения, сделанные в базе данных другими средствами, такими как редактирование вручную, не будут отражаться в этом DataSet
. Тем не менее, до тех пор, пока мы знаем, что наша служба Web является единственным местом с прямым доступом к данным, нам не о чем беспокоиться.
Служба Web заказа помещения для проведения мероприятий
Создайте новый проект службы Web в VS.NET с именем PCSWebSrv2
. Для начала добавим код в обработчик Application_Start()
в global.asax
. Мы хотим загрузить все данные из PCSWebApp3.mdb
в множество данных и сохранить его. Это будет по большей части включать код, с которым мы знакомы, так как перенос базы данных в DataSet
уже делали. Фактически, можно скопировать весь нужный код из WebForm1.aspx.cs
в PCSWebApp3
из предыдущей главы, включая строку соединения с базой данных (которая здесь не показана, так как у читателя она должна быть, скорее всего, другой):
protected void Application_Start (Object sender, EventArgs e) {
System.Data.DataSet ds;
System.Data.OleDb.OleDbConnection оleDbConnection1;
System.Data.OleDb.OleDbDataAdapter daAttendees;
System.Data.OleDb.OleDbDataAdapter daRooms;
System.Data.OleDb.OleDbDacaAdapter daEvents;
oleDbConnection1 = new System.Data.OleDb.OleDbConnection();
oleDbConnection1.ConnectionStnng = @" ... ";
oleDbConnection1.Open(); ds = new DataSet();
daAttendees =
new System.Data.OleDb.OleDbDataAdapter(
"SELECT * FROM Attendees", oleDbConnection1);
daRooms =
new System.Data.OleDb.OleDbDataAdapter(
"SELECT * FROM Rooms", oleDbConnection1);
daEvents =
new System.Data.OleDb.OleDbDataAdapter(
"SELECT * FROM Events", oleDbConnection1);
daAttendees.Fill(ds, "Attendees");
daRooms.Fill(ds, "Rooms");
daEvents.Fill(ds, "Events");
oleDbConnection1.Close();
Application["ds"] = ds;
}
Необходимо отметить важный код в последней строке. Объекты Application
(и Session
) имеют коллекцию пар имя/значение, которую можно использовать для хранения данных. Здесь создается имя ds
в хранилище объекта Application
, которое получает сериализованное значение DataSet
из ds
, содержащее таблицы Attendees
, Rooms
и Events
из базы данных. Это значение будет доступно всем экземплярам службы Web в любое время.
Чтобы приведенный выше код работал, нам нужно также добавить ссылку на пространство имен System.Data
в пространстве имен PCSWebSrv2
в global.asax
:
namespace PCSWebSrv2 {
...
using System.Data;
Эта техника очень полезна для данных, предназначенных только для чтения, так как несколько потоков выполнения смогут к нему обращаться, сокращая нагрузку на базу данных. Отметим, однако, что таблица Events
скорее всего должна измениться и будет обновлять DataSet
на уровне приложения, когда это произойдет. Мы скоро это увидим.
Интервал:
Закладка: