2009-08-25 69 views
1

我们正在使用网站的Web服务与外部服务器进行通信。 外部服务器请求会话ID。HttpWebRequest:如何获取会话ID

我们下面的代码向外部服务器:

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; 

是否有可能得到一个会话ID发送到外部服务器?

感谢您的时间

+0

您似乎在发送XML(xmlOutput),但您将内容类型设置为标准HTML表单文章,这有点奇怪,为什么不使用“text/xml”作为内容类型? – AnthonyWJones 2009-08-25 09:52:28

+0

外部服务器以什么方式“请求会话ID”。 – AnthonyWJones 2009-08-25 09:53:21

+0

外部服务器在发送给服务器的第一个请求上是否要求会话ID?因为应该由目标服务器负责生成一个有效的会话标识,然后可以在客户端中重新使用它。 – 2009-08-25 09:56:12

回答

1

这取决于您要发送请求的服务器的类型。例如,如果您拥有IIS托管的站点,则需要名为ASP.NET_SessionId(或请求字符串)的会话标识inside a cookie。如果您的Java servlet引擎位于另一端,则需要一个名为JSESSIONID(或请求路径参数jsessionid)的cookie。

所以这取决于。但是,在HttpWebRequest中设置Cookie并不困难。您可以使用属性CookieContainer

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

您存储的cookie内的会话标识符应该有特定的格式,并再次,这取决于在另一端的服务器类型。在ASP.NET中,默认情况下SessionIDManager用于生成和验证会话ID。这个类很难重用,因为它需要一个HttpContext。但是,您可以使用Reflector检查它是如何生成会话ID的。

+0

Cookie.domain错误。它不能为空 – Emanuele 2017-04-03 16:06:25

0

尽可能获取会话ID而言,你可以用得到它:

Session.SessionID 

,但我不认为你的服务器上的会话ID的任何权益外部服务器。

+0

我怀疑使用当前服务器会话ID在与外部服务器交谈时很有用。 – AnthonyWJones 2009-08-25 09:57:05

+0

我没有使用这种方式,但感谢您的时间 – Xstahef 2009-08-25 12:37:17

1

如果您的意思是外部服务器需要一个现有的会话ID来标识发送给它的先前请求所创建的会话,那么您需要为涉及的所有请求维护一个CookieContainer的实例。

CookieContainer myExternalServerCookies = new CookieContainer(); 

随着每次使用去跟外部服务器的HttpWebRequest包括此行: -

request.CookieContainer = myExternalServerCookies; 

现在,当外部服务器设置一个会话cookie,它会看到在后续请求该cookie。