ViewState в WebService? Это возможно? - PullRequest
4 голосов
/ 25 декабря 2009

согласно моим исследованиям, это невозможно ... если я не напишу один большой взлом (эрк), чтобы обойти это ... я задаюсь вопросом, возможно ли это или нет, так как некоторые из вас могут иметь больше информации об этом , я понимаю, что это пошло бы против парадигмы страницы, однако это действительно должно быть доступно ... какие-нибудь идеи кто-нибудь?

ненавижу использовать куки, так как информация обновляется и отражает реальные значения в коллекции после полного туда-обратно (так что всегда задержка в 1 поездку туда и обратно) ... я просто сохраняю массив действительно ... сеанс может использоваться в веб-сервисах но на самом деле не хочу загружать сервер слишком сильно, хотя, вероятно, это только половина Кб ... может быть, я просто слишком параноик?

Любой совет будет признателен, если стоит не использовать состояние сеанса, я в настоящее время использую куки, предпочитаю использовать viewstate, спасибо.

Ответы [ 5 ]

3 голосов
/ 25 декабря 2009

Почему бы вместо этого не использовать кеш приложения? Это прекрасно работает для этой цели.

public static void AddToCache(string key, Object value, int slidingMinutesToExpire)
{
        if (slidingMinutesToExpire == 0)
        {
            HttpRuntime.Cache.Insert(key, value, null, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.NotRemovable, null);
        }
        else
        {
            HttpRuntime.Cache.Insert(key, value, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(slidingMinutesToExpire), System.Web.Caching.CacheItemPriority.NotRemovable, null);
        }
    }
2 голосов
/ 25 декабря 2009

Нет, вы не можете использовать ViewState с веб-сервисами. ViewState требует скрытого поля <input> и обратной передачи HTTP. Поля ввода не поддерживаются веб-сервисами.

Поскольку ViewState требует кодирования данных и отправки их клиенту и обратно, он не более эффективен, чем файлы cookie, которые поддерживаются веб-службами, поскольку они реализованы на уровне протокола, а не как часть HTML, например ViewState. .

В качестве альтернативы, вы можете использовать состояние сеанса и хранить информацию на сервере.

1 голос
/ 05 января 2010

просто создайте массив объектов кеша внутри объекта сеанса :). Утилита .dispose кеша также должна освободить сеанс из памяти:)

0 голосов
/ 25 декабря 2009

Вы не можете использовать ViewState (или, возможно, можете после большого количества ненужной тяжелой работы :) в веб-службе, но в качестве альтернативы вы можете использовать состояние сеанса. Состояние сеанса включено для каждого WebMethod с использованием значения EnableSession:

[WebMethod(EnableSession=true)]
public int SessionHitCounter()
    {
    ...
    }

Подробнее здесь на MSDN.

0 голосов
/ 25 декабря 2009

Нет, Viewstate тесно связан с использованием браузера в качестве HTTP-клиента.

Для веб-сервисов у вас есть два варианта: позволить клиенту отслеживать состояние разговора или позволить серверу отслеживать его.

  • Использование состояния сеанса сервера и передача cookie (либо HTTP cookie, либо какого-либо cookie-подобного параметра внутри конверта SOAP)

  • требует от клиента отслеживать, сохранять и, возможно, передавать на сервер состояние диалога.


О Viewstate - это состояние для страницы в том виде, как оно представлено пользователю, и в качестве реализации оно тесно связано с браузером. Когда страница отображается, информация о состоянии просмотра используется для заполнения страницы. Позже, когда форма на странице публикуется, соответствующие данные формы, некоторые из которых, возможно, были предварительно настроены с помощью магии представления состояния, затем передаются на сервер. Сервер должен проверить входные данные от клиента, несмотря на использование viewstate на стороне клиента. Вы можете видеть, что состояние представления в сочетании с некоторой упрощенной логикой заполнения на стороне браузера - это способ для клиента управлять состоянием страницы, которую видит пользователь, но сервер не может отказаться от проверки состояния разговора.

Этот подход может быть использован в приложении веб-служб, но, поскольку нет никакой зависимости от браузера или от конкретной презентации (или любой презентации вообще), это самостоятельная работа вещь. Клиентское приложение поддерживает и использует любое диалоговое состояние способом, подходящим для клиента.

С другой стороны, управляемое сервером состояние означает, что на сервере сохраняется информация о состоянии для каждого «разговора» или «сеанса». Клиент не обязательно должен отслеживать информацию, если это делает сервер. Клиент просто представляет токен (или cookie, если хотите) серверу, и сервер использует его как ключ поиска в таблице состояний. Сервер в первую очередь отвечает за проверку всех состояний, сохраняемых от имени клиента.

Поскольку вы используете .NET, вам может быть интересно узнать, что Рабочий процесс может использоваться на стороне сервера для отслеживания состояния диалога на основе веб-сервисов (WCF) . Этот подход поддерживает сетевые протоколы WS - он не предусматривает какой-либо конкретной клиентской технологии или платформы.

...