【问题标题】:ksoap2 consuming .Net service with sessionsksoap2 使用带有会话的 .Net 服务
【发布时间】:2012-01-10 00:49:00
【问题描述】:

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 的值类似于

设置cookie:ASP.NET_SessionId=0zzfwxxp1sakeafybjzsxp0k;路径=/; HttpOnly

但是,GUID 部分会更改每次调用 ... transport.call()
当我使用相同的标头时(通过将 if mSessionHeader == null 放在 for 循环周围) 它仍然不起作用......该方法会发送每条消息,而不管 我在 Web 服务中设置的位置

除了 ASP.NET_SessionId 之外,我是否必须添加更多标头?

【问题讨论】:

    标签: android asp.net web-services session android-ksoap2


    【解决方案1】:

    我很惊讶没有人要求回答这个问题……反正我找到了。

    发送cookie的请求头与响应不同-

    请求

    “Cookie:ASP.NET_SessionId=#####”

    回应

    “设置 Cookie:ASP.NET_SessionId=#####”

    所以上面的行 -

    reqHeaders.add(mSessionHeader);
    

    改为

    reqHeaders.add(new HeaderProperty("Cookie", mSessionHeader.getValue());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      相关资源
      最近更新 更多