Как использовать зависимые от сессии службы WCF с помощью Ksoap2-Android - PullRequest
24 голосов
/ 23 июня 2010

Я использую Ksoap2-Android для использования WCF Сервисов.

Для клиента dotnet мы сохраняем allowCookies="true" в нашей конфигурации привязки, и он отправляет тот же идентификатор сеанса и сохраняет мои сеансы в целости в моих службах WCF ( взаимозависимы и используют сеансы ).

Любой знает любой такой параметр для ksoap2-android, который позволит мне потреблять Служба WCF, сохраняющая мою сессию на сервере без изменений.

В настоящее время, когда я делаю новый вызов в службу, sessionid меняется, и все мои переменные сеанса очищаются и теряют свои значения.

1 Ответ

1 голос
/ 06 мая 2012

В C # я делаю следующее, просто используйте методы Android для этого:

1.- Сделайте запрос Http, 2.- Создайте контейнер cookie из первого запроса. 3.- Поместите cookieContainer поверх второго запроса, например, вы можете поместить пакет в намерение для второго действия и использовать эти файлы cookie для отправки второго http-запроса ...

Мой код C #;

protected static void GetData()
    {
        CookieContainer cookies = new CookieContainer();
        HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create("https://any.com/url");
        request1.CookieContainer = cookies;
        HttpWebResponse response1 = (HttpWebResponse)request1.GetResponse();
        StreamReader responseReader1 = new StreamReader(response1.GetResponseStream());
        Response1 = responseReader1.ReadToEnd();
        responseReader1.Close();
        responseReader1.Dispose();

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
        request.CookieContainer = cookies;
        request.Method = "GET";
        request1.KeepAlive = true;
        try
        {
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader responseReader = new StreamReader(response.GetResponseStream());
            Response = responseReader.ReadToEnd();
            responseReader.Close();
            responseReader.Dispose();
            if (Response.Contains("Server Error in '/Verification' Application."))
            {
                Console.WriteLine("Empty Registry" + Url);
            }
        }
        catch (WebException ex)
        {
            if (ex.Response != null)
            {
                Console.WriteLine("Failed at: " + Url);
            }
            if (ex.Status == WebExceptionStatus.ProtocolError)
            {
                if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound)
                {
                    Console.WriteLine(ex.Status);
                }
            }
            else if (ex.Status == WebExceptionStatus.NameResolutionFailure)
            {
                Console.WriteLine(ex.Status);
            }

        }
    }

Я делаю это для сохранения sesionID первого запроса, а позже, во втором запросе, добавляю cookieContainer (поскольку сервер требует меня) (для поиска ботов);) ... надеюсь, это даст вам идеи.

...