2012-05-01 2 views
1

Как я могу сделать HTTPHandler в файле ashx PLACE sessionCookie, управляемый ASP.NET? Кажется, что вызов ashx-файла не помещает cookie, поэтому сеанс не может поддерживаться.Сделать HTTPHandler (ashx) для размещения сеансового файла cookie в ASP.NET

Фон: Я собираюсь написать HTTP-сервисную оболочку веб-сервиса. Различные клиенты называют URL-адрес, который я предоставляю им с заданными параметрами. Я проверяю учетные данные, вызываю сторонний веб-сервис и передаю измененный результат клиенту. Сторонний поставщик веб-услуг требует по контракту SessionID для каждого клиентского вызова.

Решение: HTTPHandler кажется лучшим выбором. Поэтому я создал проект веб-сайта. К сожалению, прямой вызов ashx-файла, похоже, не добавляет к ответу cookie сеанса, поэтому для каждого вызова от одного и того же клиента создается новый SessionID.

я сделал следующее отношение:

  • Реализовано разметки интерфейсов IRequiresSessionState или/и IReadOnlySessionState
  • Добавлено <sessionState mode="InProc" cookieless="false" timeout="20" /> в web.config
  • Сохранить то, что в состоянии сеанса в Global.asax Файл в Session_Start-Method HttpContext.Current.Session ("init") = 0

Различные попытки, которые работают, но следует избегать:

  • Перед вызовом ASHx-File вызов Файл Default.aspx помещает куки сессии, поэтому сеанс поддерживается.
  • Внедрить «собственное» сеанс с базой данных и меткой времени.

Версия: IIS 6.0

+0

Какая версия IIS это и вы можете поделиться перманентными частями вашего web.config (system.web)? –

+0

добавлена ​​дополнительная информация – Anytoe

ответ

0

IRequireSessionState и IRequireReadOnlySessionState являются взаимоисключающими. Вы должны выполнять только первое, если вы намерены обновить состояние сеанса каким-либо образом.

+0

Я пробовал каждую комбинацию, извините за то, что она неспецифична. Я думаю, проблема заключается в том, что никакой cookie не устанавливается вообще. Если я вызову вручную сайт Default.aspx, сеанс работает так, как предполагается для HTTPHandler – Anytoe

+0

Хорошо, хорошо ... мы будем продолжать работать над этим, но вам определенно нужно реализовать IRequireSessionState. Я собираюсь попросить дополнительную информацию в комментарии к вашему вопросу. –