ksoap2 потребляет .Net сервис с сессиями - PullRequest
0 голосов
/ 10 января 2012

GetMessages - это метод, который я использую в веб-сервисе .net для моей программы чата. Он получает коллекцию сообщений, отправляя только новые, сохраняя идентификатор последнего сообщения в переменной сеанса.

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 ()
Когда я использую тот же заголовок (поставив if mSessionHeader == null вокруг цикла for) это все еще не работает ... метод получает каждое отправленное сообщение независимо от положение, которое я установил в веб-сервисе

Нужно ли добавлять больше заголовков, чем просто ASP.NET_SessionId?

1 Ответ

0 голосов
/ 10 января 2012

Я удивлен, что нет ответа на этот вопрос ... в любом случае, я нашел его.

Заголовок запроса на отправку куки отличается от ответа -

Запрос

"Cookie: ASP.NET_SessionId = #####"

Ответ

"Set-Cookie: ASP.NET_SessionId = #####"

Итак, вышеприведенная строка -

reqHeaders.add(mSessionHeader);

изменяется на

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