如何在ac#应用程序中对Web服务的两次调用之间保持会话活动?

这很简单。
我正在从ac#应用程序调用Web服务(.asmx,启用会话)。

我希望每个调用都使用与前一个相同的会话密钥(而不是每次都创建一个新的会话密钥)。

这是我的(没有什么不寻常的)代码:

public string invokeMethod(string methodUrl) { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(methodUrl); req.Method = "GET"; req.ContentLength = 0; var result = new StringBuilder(); using (HttpWebResponse res = (HttpWebResponse)req.GetResponse()) { StreamReader sr = new StreamReader(res.GetResponseStream()); result.Append(sr.ReadToEnd()); } return result.ToString(); } 

现在我想在同一个会话中再次调用它。

补充:感谢Waleed的回答,我想我应该做(在检索会话ID之后):
再次添加:这就是它的完成方式:

 if (!string.IsNullOrEmpty(currentSessionID)) { Cookie cookie = new Cookie("ASP.NET_SessionId", currentSessionID); cookie.Domain=myDomain; //Will not work without this line! req.CookieContainer.Add(cookie); } 

再次感谢。

如果我正确理解了这个问题,我相信您需要从响应中获取会话cookie(第一次调用Web服务)并在后续调用中将其添加到请求中。

编辑:

使用CookieContainer是正确的方法,但要注意它默认为null,因此您必须在发出请求之前将CookieContainer对象分配给属性(请参阅MSDN文章中的示例代码)。

至于cookie名称,ASP.NET会话cookie的默认名称是ASP.NET_SessionId,但名称可以不同,因为它可以在web.config中更改,或者它们可能没有使用ASP.NET会话(它们自己的实现)例如),因此您必须检查从该应用程序的域中获取的cookie(您可以使用像Fiddler这样的HTTP嗅探器,或者如果您使用的是FireFox或Chrome,则可以更轻松地检查名称和内容)您在选项对话框中从该域获得的cookie)。

在MSDN上使用ASP.NET会话状态和Web服务有一个很好的讨论:

http://msdn.microsoft.com/en-us/library/aa480509.aspx

从第一次调用开始,在响应中查看ASP.NET_SessionId值,默认情况下这是会话ID。

然后将其添加到下一个电话(见下文):

http://support.microsoft.com/?kbid=899918