黄季冬=>fox23

Nothing replaces hard work
数据加载中……
[CF.Skills]在.NET Compact Framework中设置webservice的session状态
.NET CF中没有Cookie Container之类方便管理cookie的类,我刚刚简单的搜索了一下,找到一段用作Session管理器的代码:(原文见这里)
        /// <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;
        }

除了这种人工控制请求应答的消息头的方式,不知道在.NET CF中大家还有哪些方案来维系webservice的会话,不妨一同探讨一下:-)

Regards

黄季冬

posted on 2008-04-29 18:47 fox23 阅读(45) 评论(0)  编辑 收藏 所属分类: Winbile Skills


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交