我们使用的是网络服务的网站与外部服务器进行通信。 外部服务器请求一个会话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发送到外部服务器?
谢谢你的时间
这取决于服务器的类型,您要发送的请求。 举例来说,如果你有一个IIS托管的网站,它需要一个会话ID 一个cookie里面名为ASP.NET_SessionId
(或请求字符串)。 如果你对对方一个Java servlet引擎,它期望一个名为cookie的JSESSIONID
(或请求路径参数jsessionid
)。
所以,这取决于。 然而,设置HttpWebRequest的cookies内并不困难。 您可以使用属性CookieContainer
:
CookieContainer cookies = new CookieContainer();
cookies.Add(new Cookie("ASP.NET_SessionId", sessionId));
request.CookieContainer = cookies;
您存储的cookie内的会话标识符应该有特定的格式,并再次,这取决于在另一端的服务器类型。 在ASP.NET默认情况下,类SessionIDManager
用于生产和验证会话ID。 这个类是难以重用,因为它需要一个HttpContext
。 但是,您可以用反射镜检查它是如何生成会话ID。
如果你指的是外部服务器需要通过识别发送给它之前的请求创建一个会话的现有会话ID,那么你需要保持的CookieContainer实例为所有参与的请求。
CookieContainer myExternalServerCookies = new CookieContainer();
随着每一个HttpWebRequest的使用去跟外部服务器包括此行: -
request.CookieContainer = myExternalServerCookies;
现在,当外部服务器设置一个会话cookie,它会看到在后续请求该cookie。
至于获得会话ID而言,你可以用得到它:
Session.SessionID
但我不认为你的服务器上的会话ID的任何感兴趣的外部服务器。