.NET Compact Framework在调用Axis实现的WebService中如何维持Session
最近在一个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![](/Images/OutliningIndicators/None.gif)
5
namespace MyTest.DataTransfer
6
{
7
/// <summary>
8
/// 数据传输适配器,用来托管web service接口.
9
/// </summary>
10
public sealed class TransmitAdapter : MyTestService
11
{
12
private string _jSessionID = string.Empty;
13
private static TransmitAdapter _instance;
14
private TransmitAdapter() : base()
15
{
16
}
17![](/Images/OutliningIndicators/InBlock.gif)
18
//FIXUP: An unhandled exception of type 'System.Net.Sockets.SocketException' occurred in System.dll?
19
protected override WebRequest GetWebRequest(Uri uri)
20
{
21
HttpWebRequest httpWebReq = base.GetWebRequest(uri) as HttpWebRequest;
22
if (!string.IsNullOrEmpty(_jSessionID))
23
{
24
httpWebReq.Headers.Add("COOKIE", "JSESSIONID=" + _jSessionID);
25
}
26
httpWebReq.AllowWriteStreamBuffering = true;
27
return httpWebReq;
28
}
29![](/Images/OutliningIndicators/InBlock.gif)
30
/// <summary>
31
/// singleton.
32
/// </summary>
33
public static TransmitAdapter Instance
34
{
35
get
36
{
37
if (_instance == null)
38
{
39
_instance = new TransmitAdapter();
40
}
41
return _instance;
42
}
43
}
44![](/Images/OutliningIndicators/InBlock.gif)
45
/// <summary>
46
/// Session Id.
47
/// </summary>
48
public string SessionID
49
{
50
get { return _jSessionID; }
51
set { _jSessionID = value; }
52
}
53
}
54
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
7
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
43
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
50
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
51
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
52
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
53
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
54
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
--调用Web服务--
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
参考资源:
Session Management in ASP.NET
Thin Client for Microsoft Visual SourceSafe on Pocket PC / SmartPhones