最近在一个WinCE的设备上开发应用,通过GPRS上网调用WebService。服务端用java开发的,使用Axis的实现标准。发现.NET Compact Framework没有实现System.Net.CookieContainer,没法在WinCE的客户端保持会话。
后来通过分析Web请求响应的Http消息头,了解到Axis的Session是通过Cookie来管理,并通过在Http消息头中加入Cookie:JSESSIONID=XS52V1MBNVOAAQSNDBESKHA 进行传递的。在确定了问题原因之后,解决方案就比较简单了:
1、调用login成功的时候服务器返回SessionId;
2、截获HttpWebRequest,加入该消息头。代码如下:
--托管Web服务客户端代理--
1
using System;
2
using System.Net;
3
using MyTest.DataTransfer.WebReference;
4
5
namespace MyTest.DataTransfer
6
}
2
3
4
5
6
--调用Web服务--
参考资源:
Session Management in ASP.NET
Thin Client for Microsoft Visual SourceSafe on Pocket PC / SmartPhones