[CF.Skills]在.NET Compact Framework中设置webservice的session状态
.NET CF中没有Cookie Container之类方便管理cookie的类,我刚刚简单的搜索了一下,找到一段用作Session管理器的代码:(原文见这里)
除了这种人工控制请求应答的消息头的方式,不知道在.NET CF中大家还有哪些方案来维系webservice的会话,不妨一同探讨一下:-)
Regards
黄季冬
/// <summary>
/// This field contains the received session cookie
/// </summary>
private string cookie = null;
/// <summary>
/// Http-Header for the request SessionCookie
/// </summary>
private const string REQUESTHEADER_SESSIONCOOKIE = "Cookie";
/// <summary>
/// Http-header for the response SessionCookie
/// </summary>
private const string RESPONSEHEADER_SESSIONCOOKIE = "Set-Cookie";
private void ProcessResponse(System.Net.HttpWebResponse response)
{
// Is the cookie present in the response?
if (response.Headers.Get(RESPONSEHEADER_SESSIONCOOKIE) != null)
{
// Store the cookie
cookie = response.Headers.Get(RESPONSEHEADER_SESSIONCOOKIE);
}
}
/// <summary>
/// This override will tweak the request to allow Session-cookies
/// </summary>
/// <returns>The tweaked request</returns>
protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)base.GetWebRequest(uri);
// Is the session cookie cached?
if (cookie != null)
{
// Add the sessioncookie to the request
request.Headers.Add(REQUESTHEADER_SESSIONCOOKIE, cookie);
}
return request;
}
/// <summary>
/// This override will tweak the response to allow Session-cookies
/// </summary>
protected override System.Net.WebResponse GetWebResponse(System.Net.WebRequest request)
{
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)base.GetWebResponse(request);
ProcessResponse(response);
return response;
}
/// <summary>
/// This override will tweak the response to allow Session-cookies
/// </summary>
protected override System.Net.WebResponse GetWebResponse(System.Net.WebRequest request, IAsyncResult result)
{
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)base.GetWebResponse(request, result);
ProcessResponse(response);
return response;
}
/// This field contains the received session cookie
/// </summary>
private string cookie = null;
/// <summary>
/// Http-Header for the request SessionCookie
/// </summary>
private const string REQUESTHEADER_SESSIONCOOKIE = "Cookie";
/// <summary>
/// Http-header for the response SessionCookie
/// </summary>
private const string RESPONSEHEADER_SESSIONCOOKIE = "Set-Cookie";
private void ProcessResponse(System.Net.HttpWebResponse response)
{
// Is the cookie present in the response?
if (response.Headers.Get(RESPONSEHEADER_SESSIONCOOKIE) != null)
{
// Store the cookie
cookie = response.Headers.Get(RESPONSEHEADER_SESSIONCOOKIE);
}
}
/// <summary>
/// This override will tweak the request to allow Session-cookies
/// </summary>
/// <returns>The tweaked request</returns>
protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)base.GetWebRequest(uri);
// Is the session cookie cached?
if (cookie != null)
{
// Add the sessioncookie to the request
request.Headers.Add(REQUESTHEADER_SESSIONCOOKIE, cookie);
}
return request;
}
/// <summary>
/// This override will tweak the response to allow Session-cookies
/// </summary>
protected override System.Net.WebResponse GetWebResponse(System.Net.WebRequest request)
{
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)base.GetWebResponse(request);
ProcessResponse(response);
return response;
}
/// <summary>
/// This override will tweak the response to allow Session-cookies
/// </summary>
protected override System.Net.WebResponse GetWebResponse(System.Net.WebRequest request, IAsyncResult result)
{
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)base.GetWebResponse(request, result);
ProcessResponse(response);
return response;
}
除了这种人工控制请求应答的消息头的方式,不知道在.NET CF中大家还有哪些方案来维系webservice的会话,不妨一同探讨一下:-)
Regards
黄季冬
posted on 2008-04-29 18:47 J.D Huang 阅读(1165) 评论(2) 编辑 收藏 举报