24

Ksoap2-Android用于消费WCF服务。

对于dotnet 客户端,我们将其保留allowCookies="true"在绑定配置中,它会发送相同的 sessionid 并使我的会话在我的 WCF 服务中保持不变(我的服务是相互依赖的并使用会话)。

任何人都知道 的任何此类设置ksoap2-android,这将允许我使用 WCF 服务,使我的会话在服务器上保持不变。

目前,当我对服务进行新调用时,sessionid会发生更改,并且我的所有会话变量都会清除并丢失它们的值。

4

1 回答 1

1

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

        }
    }

我这样做是为了保留第一个请求的 sessionID,然后,在第二个请求中,我添加了 cookieContainer(因为服务器需要我)(进行机器人搜索);)......希望这能给你一些想法。

于 2012-05-06T06:00:13.693 回答