GetMessages是我在聊天程序的.net网络服务中使用的方法。它获取一组消息,仅通过将最后一条消息ID保存在会话变量中来发送新消息。
HeaderProperty mSessionHeader = null;
public SoapObject GetMessages()
{
...
SoapObject request = new SoapObject(NAMESPACE, METHOD);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.V11);
envelope.dotNet = true;
envelope.bodyOut = request;
HttpTransport transport = new HttpTransport(URL);
transport.debug = true;
// Build request header
LinkedList<HeaderProperties> reqHeaders = new LinkList<HeaderProperties>();
if (mSessionHeader != null) {
reqHeaders.add(mSessionHeader); //using the session id from last header
}
List<HeaderProperties> respHeaders = transport.call(ACTION, envelope, reqHeaders);
// See note after code
for (HeaderProperty hp : respHeaders) {
if (hp.getKey().equalsIgnoreCase("set-cookie"))
{
mSessionHeader = hp;
break;
}
}
return (SoapObject) envelope.getResponse();
}
mSessionHeader的值类似于
set-cookie:ASP.NET_SessionId = 0zzfwxxp1sakeafybjzsxp0k;路径= /;仅Http
但是,GUID部分会更改每次调用... transport.call()
当我使用相同的标题时(通过在for循环周围放置mSessionHeader == null)
它仍然不起作用...该方法获取发送的每条消息,无论如何
我在Web服务中设置的位置
我是否必须添加更多标题,然后只添加ASP.NET_SessionId?
答案 0 :(得分:0)
我很惊讶没有要求回答这个问题......无论如何我找到了它。
发送cookie的请求标头与响应不同 -
请求
“Cookie:ASP.NET_SessionId = #####”
响应
“Set-Cookie:ASP.NET_SessionId = #####”
所以上面一行 -
reqHeaders.add(mSessionHeader);
变为
reqHeaders.add(new HeaderProperty("Cookie", mSessionHeader.getValue());