Иллюстрированный самоучитель по Architecture .NET

Арифметическая Служба Сети, или Web-служба Arithmetic (Арифметика). Использование внутренних объектов.

Присвоив аргументу EnableSession конструктора WebMethod значение true (истина), мы включили состояние сеанса для метода SessionSum. В начале каждого сеанса значению суммы присваивается нуль. С другой стороны, аргумент EnableSession Web-метода CumulativeSum по умолчанию принимает значение false (ложь). Это означает, что общей сумме присваивается исходное значение нуль лишь в том случае, если приложение с данной Web-службой перезапускается. Объект HttpContext использует встроенный объект Application (Приложение), чтобы показать, как используется данный класс.

Если вы посмотрите на код, приведенный ниже, то вам станет ясно, что объекты HttpApplication, WebService и HttpContext указывают на один и тот же внутренний объект. Чтобы сохранить состояние приложения или состояние сеанса, можно воспользоваться коллекциями объектов HttpApplicationState и HttpSessionState.

[System::Web::Services::WebMethod(EnableSession = true)]
// [Система::Сеть::Службы::WebMethod (EnableSession = истина)]
double SessionSum(double x)
{
double d = *dynamic_cast<Double *>
(Session › get_Item("SessionSum")); // Сеанс
Session › set_Item("SessionSum", _box(d + x)); // Сеанс
return *dynamic_cast<Double *>
(Session › get_Item("SessionSum")); // Сеанс
}
[System::Web:: Services::WebMethod]
// [Система::Сеть::Службы::WebMethod]
double CumulativeSum(double x)
{
double sum = *dynamic_cast<Double *> // сумма
(Application › get_Item("TotalSum")); // Приложение
sum = sum + x;
// сумма = сумма + x;
Application › set_Item("TotalSum", _box(sum)); // сумма
return *dynamic_cast<Double *>
(Application › get_It^m("TotalSum")); // Приложение
}
…

Метод GetUserAgent иллюстрирует, как с помощью объекта Context (Контекст) извлечь информацию о запросе. Тип используемого клиента возвращается Web-службе. Для извлечения информации из внутреннего объекта Server (Сервер) служит метод GetServerlnfo.

[System::Web::Services::WebMethod]
// [Система::Сеть::Службы::WebMethod]
String *GetUserAgent()
{
return Context › Request › UserAgent;
// Koнтeкст › 3anpoc › UserAgent;
}
[System::Web::Services::WebMethod]
// [Система::Сеть::Службы::WebMethod]
String *GetServerInfo()
{
String *msg = String::Format(
// Строка *msg = Строка:: Формат (
"Timeout for {0} = {!}; Located at {2}",
// "Время ожидания для {0} = {1}; расположенного в {2} ",
Server › MachineName, // Сервер _box(Server › ScriptTimeout), // Сервер
Server › MapPath(""}); // Сервер
return msg; // сообщение
}

Возможности Web-службы будут продемонстрированы с помощью консольной программы [Вам придется самостоятельно скопировать файл Anthmetic.dll из каталога Anthmetic\Debug в каталог AnthmeticClient\Debug. Если этого не сделать, при попытке запустить файл ArithmeticChent.exe возникнет необрабатываемое исключение (System.lO.FileNotFoundException).] ArithmeticClient. Создать класс-заместитель можно в среде Visual Studio .NET. Для этого в меню Project (Проект) выберите команду Add Web Reference (Добавить Web-ссылку), затем в строке Address (Адрес) введите адрес Web-службы и нажмите клавишу Enter. В данном примере нужно ввести следующий унифицированный указатель информационного ресурса (URL) http://localhost/Arithmetic/Arithmetic.asmx. В диалоговом окне будет отображена информация о Web-службе Arithmetic (Арифметика), рис. 11.8.

Иллюстрированный самоучитель по Architecture .NET › Web-службы › Арифметическая Служба Сети, или Web-служба Arithmetic (Арифметика). Использование внутренних объектов.
Рис. 11.8. Visual Studio NET отображает информацию о Web-службе Arithmetic (Арифметика)

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.