2010-06-23 6 views
24

Ich verwende Ksoap2-Android für den Verbrauch der WCF Services.Wie konsumieren Session abhängige WCF-Dienste mit Ksoap2-Android

Für die Dotnet Client halten wir die allowCookies="true" in unserer Bindungskonfiguration und sendet die gleiche sessionid und hält meine Sitzungen intakt in meine WCF-Dienste (Meine Leistungen sind voneinander abhängig und verwenden Sie die Sitzungen).

Jeder kennt eine solche Einstellung für ksoap2-android, mit dem ich den WCF-Dienst konsumieren kann, der meine Sitzung auf dem Server intakt hält.

Derzeit, wenn ich einen neuen Anruf an den Service, die sessionid wird geändert und alle meine Session Variablen löschen und verlieren ihre Werte.

Antwort

1

In C# i tun die nächsten, verwenden Sie nur die Android-Methoden, dies zu tun:

1.- Nehmen Sie die HTTP-Anfrage, 2.- Machen Sie einen Cookie-Container der ersten Anfrage. 3.- Setzen Sie den cookieContainer über die zweite Anfrage, zum Beispiel können Sie ein Bündel in einer Absicht für die zweite Aktivität, und verwenden Sie diese Cookies zum Senden der zweiten http-Anfrage ...

Mein C# -Code;

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); 
      } 

     } 
    } 

ich das für halten die sesionID der ersten Anfrage, und später, in der zweiten Anfrage, füge ich die Cookie (weil der Server mich erfordert) (um einen Bot Suche zu machen);) ... Hoffe, das gibt dir Ideen.