0

GetMessagesは、チャットプログラム用の.netWebサービスにあるメソッドです。メッセージのコレクションを取得し、最後のメッセージ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; パス=/; HttpOnly

ただし、GUID部分はすべての呼び出しを... transport.call()に変更します。
同じヘッダーを使用すると(mSessionHeader == nullをforループの周りに配置することにより)、それでも機能しません...メソッドはすべてのメッセージを送信しますWebサービスで設定した位置に関係なく

ASP.NET_SessionIdだけでなく、ヘッダーを追加する必要がありますか?

4

1 に答える 1

0

これに対する答えが求められていないことに驚いています...とにかく見つけました。

Cookie を送信するためのリクエスト ヘッダーは、レスポンスとは異なります -

リクエスト

「Cookie: ASP.NET_SessionId=#####」

応答

「セット Cookie: ASP.NET_SessionId=#####」

したがって、上記の行-

reqHeaders.add(mSessionHeader);

に変更されます

reqHeaders.add(new HeaderProperty("Cookie", mSessionHeader.getValue());
于 2012-01-10T14:42:43.117 に答える