24

サービスを利用するKsoap2-Androidために使用していWCFます。

dotnet クライアントの場合、バインディング構成にを保持しallowCookies="true"、同じセッション ID を送信し、WCF サービスでセッションをそのまま保持します (私のサービスは相互に依存しており、セッションを使用します)。

のそのような設定を知っている人は誰でもksoap2-android、サーバー上でセッションをそのまま維持しながらWCFサービスを使用できるようにします。

現在、サービスに新しい呼び出しを行うと、sessionidが変更され、すべてのセッション変数がクリアされて値が失われます。

4

1 に答える 1

1

C# では、次のことを行います。Android メソッドを使用してこれを行うだけです。

1.- HTTP リクエストを作成します。2.- 最初のリクエストの Cookie コンテナを作成します。3.- cookieContainer を 2 番目のリクエストに配置します。たとえば、2 番目のアクティビティのインテントにバンドルを配置し、この Cookie を使用して 2 番目の 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);
            }

        }
    }

最初のリクエストのセッションIDを保持するためにそれを行い、その後、2番目のリクエストで、cookieContainerを追加します(サーバーが私を必要とするため)(ボット検索を行うため);)...これがあなたのアイデアを与えることを願っています.

于 2012-05-06T06:00:13.693 に答える