Книга: Программирование мобильных устройств на платформе .NET Compact Framework

Листинг 15.8. Вызов Web-служб путем неявной передачи параметров посредством cookie-файлов

Листинг 15.8. Вызов Web-служб путем неявной передачи параметров посредством cookie-файлов

//0. Установить связь
//Хотя этого и не видно, с сервера будет передан клиентский cookie-файл!
int sessionID = someWebService.LogOn(userCredentials);
//1. Вызвать Web-службу и создать новый заказ
//Хотя этого и не видно, на сервер будет передан клиентский cookie-файл!
//Хотя этого и не видно, с сервера будет передан клиентский cookie-файл!
someWebService.CreateNewOrder(userInfo, productInfo);
//
//...Выполнение другого многострочного кода...
//
//2. Подтвердить заказ серверу
//Хотя этого и не видно, на сервер передается клиентский
//cookie-файл, содержащий "orderID". Лихо!
someWebService.ConfirmPayment(paymentInfo);
//
//...Выполнение другого многострочного кода...
//
//3. Подтвердить адрес доставки
//Хотя этого и не видно, на сервер передается клиентский
//cookie-файл, содержащий "orderID". Лихо!
someWebService.ConfirmShipping(shippingAddress);
//
//...Выполнение другого многострочного кода...
//
//4. Завершить оформление заказа
//Хотя этого и не видно, на сервер передается клиентский
//cookie-файл, содержащий "orderID". Лихо!
someWebService.FinalizeOrder();

Приведенный выше код довольно прост, однако, о чем говорится в комментариях, имеется и второй канал связи, скрытый от программиста. Скрытые параметры передаются в обоих направлениях между клиентом и сервером посредством cookie-файлов. Этот факт является убедительным аргументом в пользу того, чтобы не использовать cookie-файлы на стороне клиента при проектировании Web-служб. Гораздо лучше передавать все параметры, требуемые для запроса Web-службы, явным образом, чем использовать для хранения этой информации непрозрачный второй канал.

Многие платформы мобильных устройств либо вообще не поддерживают клиентские cookie-файлы, либо эта поддержка существенно отличается от той, которая предлагается программными каркасами на настольных компьютерах. В частности, в .NET Compact Framework, выполняющейся на устройствах Smartphone, Pocket PC и Windows СЕ, автоматическая передача cookie-файлов вместе с запросами Web-служб не поддерживается. Если вы хотите, чтобы некоторые cookie-файлы были переданы сервером на устройство и возвращены на сервер вместе с последующим запросом, то вы должны написать код для чтения содержимого cookie-файлов из заголовков одного из ответов HTTPWebResponse и записи содержимого cookie-файлов в заголовки последующего запроса HTTPWebRequest. Для этого в случае вызова Web-служб вы должны просмотреть и изменить прокси-код Web службы на стороне клиента, автоматически сгенерированный для вас Visual Studio .NET. Эта задача ни в коей мере не является неразрешимой, но потребует от вас выполнения дополнительной работы, к чему вы должны быть готовы. В этом и состоит важное отличие в поддержке Web-служб программными каркасами на устройствах и настольных компьютерах.

Несмотря на тот факт, что использовать cookie-файлы на стороне клиента при создании Web-служб не рекомендуется, они могут использоваться некоторыми службами, например для хранения информации о входе пользователя в систему. Если Web- служба работает нормально, если вызывается на настольном компьютере, но ее вызовы с мобильного устройства заканчиваются непонятными сбоями, то не исключено, что виновником этих сбоев являются cookie-файлы. Если есть такая возможность, уточните у автора Web-службы, используются ли в ней cookie-файлы; это всегда проще, чем пытаться самостоятельно восстановить причину происходящего. Если получить эту информацию от автора Web-службы не удается, вы можете попытаться исследовать ситуацию эмпирически путем изменения политики обработки cookie-файлов на настольном компьютере; соответствующие изменения можно задать в обозревателе Internet Explorer, выбрав в меню Tools (Сервис) пункт Options (Свойства обозревателя) и перейдя в открывшемся диалоговом окне на вкладку Privacy (Конфиденциальность). Кроме того, если у вас есть желание окунуться в разработку низкоуровневого кода клиентов Web-служб, вы можете изучить набор клиентских cookie-файлов, возвращенный вместе с ответом HTTPWebResponse на Web-запрос. Если в зависимостях клиентских cookie-файлов имеются ошибки, то вы можете действовать трояким образом: 1) обеспечить поддержку Web-службой модели доступа, не требующей использования cookie-файлов, что неплохо сделать в любом случае, 2) создать Web-службу в виде оболочки на стороне сервера, которая играет роль посредника между мобильными устройствами и проблематичной Web-службой, или 3) написать для устройства собственный код, который явным образом осуществляет сборку cookie-файлов, возвращенных вместе с ответами любой Web-службы, и упаковывает их в последующие Web-запросы.

Оглавление книги


Генерация: 0.061. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз