2010-06-23 28 views
24

Tôi đang sử dụng Ksoap2-Android để sử dụng các Dịch vụ WCF.Cách sử dụng các dịch vụ WCF phụ thuộc phiên sử dụng Ksoap2-Android

Đối với khách hàng DotNet chúng tôi giữ allowCookies="true" trong cấu hình ràng buộc của chúng tôi và nó sẽ gửi cùng sessionid và giữ phiên của tôi còn nguyên vẹn trong các dịch vụ WCF của tôi (dịch vụ của tôi là phụ thuộc lẫn nhau và sử dụng các phiên).

Bất kỳ ai biết bất kỳ cài đặt nào như vậy cho ksoap2-android, điều đó sẽ cho phép tôi sử dụng dịch vụ WC2 giữ nguyên phiên của tôi nguyên vẹn trên máy chủ.

Hiện tại khi tôi thực hiện cuộc gọi mới đến dịch vụ, số sessionid bị thay đổi và tất cả các biến số phiên của tôi xóa và xóa các giá trị của chúng.

Trả lời

1

Trong C# i làm, chỉ cần sử dụng các phương pháp android tiếp theo để làm điều này:

1. Hãy yêu cầu Http, 2. Thực hiện một Cookie container của yêu cầu đầu tiên. 3.- Đặt cookieContainer trong yêu cầu thứ hai, ví dụ: bạn có thể đưa vào gói theo ý định cho hoạt động thứ 2 và sử dụng cookie này để gửi yêu cầu thứ hai ...

Mã C# của tôi;

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

     } 
    } 

tôi làm điều đó cho giữ sesionID của yêu cầu đầu tiên, và sau đó, trong yêu cầu thứ hai, tôi thêm cookieContainer (vì máy chủ đòi hỏi tôi) (để thực hiện một tìm kiếm bot);) ... hy vọng điều này sẽ cho bạn ý tưởng.

Các vấn đề liên quan