HttpWebRequest: как получить идентификатор сессии - PullRequest
1 голос
/ 25 августа 2009

мы используем веб-сервис для веб-сайта для связи с внешним сервером. Внешний сервер запрашивает идентификатор сеанса.

Наш следующий код запрашивает внешний сервер:

HttpWebRequest webRequest = WebRequest.Create(ExtUrl) as HttpWebRequest;
webRequest.Credentials = new NetworkCredential(ExtAccountToUse, ExtPassword);
HttpWebResponse webResponse;
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";                
StreamWriter writer = new StreamWriter(webRequest.GetRequestStream());
 writer.Write(xmlOutput);
writer.Close();               
webResponse = webRequest.GetResponse() as HttpWebResponse;  

Можно ли получить идентификатор сеанса для отправки на внешний сервер?

Спасибо за ваше время

Ответы [ 3 ]

1 голос
/ 25 августа 2009

Это зависит от типа сервера, на который вы отправляете запрос. Например, если у вас есть сайт, размещенный на IIS, он ожидает идентификатор сеанса внутри файла cookie с именем ASP.NET_SessionId (или в строке запроса). Если у вас есть движок Java-сервлетов на другой стороне, он ожидает файл cookie с именем JSESSIONID (или параметр пути запроса jsessionid).

Так что это зависит. Тем не менее, установка файлов cookie внутри HttpWebRequest не составляет труда. Вы можете использовать свойство CookieContainer:

CookieContainer cookies = new CookieContainer();
cookies.Add(new Cookie("ASP.NET_SessionId", sessionId));
request.CookieContainer = cookies;

Идентификатор сеанса, который вы храните внутри куки, должен иметь определенный формат, и опять же, это зависит от типа сервера на другом конце. В ASP.NET по умолчанию класс SessionIDManager используется для создания и проверки идентификаторов сеансов. Этот класс трудно использовать повторно, потому что он требует HttpContext. Однако вы можете проверить с помощью Reflector, как он генерирует идентификатор сеанса.

1 голос
/ 25 августа 2009

Если вы имеете в виду, что внешнему серверу требуется существующий идентификатор сеанса, который идентифицирует сеанс, созданный предыдущими запросами, отправленными на него, то вам необходимо поддерживать экземпляр CookieContainer для всех задействованных запросов.

 CookieContainer myExternalServerCookies = new CookieContainer();

В каждом HttpWebRequest, который вы используете для связи с внешним сервером, укажите следующую строку: -

 request.CookieContainer = myExternalServerCookies;

Теперь, когда внешний сервер устанавливает файл cookie сеанса, он увидит этот файл cookie в последующих запросах.

0 голосов
/ 25 августа 2009

Что касается получения идентификатора сеанса, вы можете получить его, используя:

Session.SessionID

но я не думаю, что идентификатор сеанса на вашем сервере представляет какой-либо интерес для внешнего сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...