Арифметическая Служба Сети, или 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.
Рис. 11.8. Visual Studio NET отображает информацию о Web-службе Arithmetic (Арифметика)