3

次のコードを .NET 3.5 で実行しようとするとハングします (プロジェクトを .NET 4 に設定すると動作します)

(2分くらい待った - フリーズしそう)

        HttpWebRequest l_oRequest;
        HttpWebResponse l_oResponse;

        if (m_bLoggedIn)
            return true;

        m_oSession = new SSessionIdentifier();
        m_oSession.Cookies = new CookieContainer();

        string l_sHost = "https://website.com";

        // Start the login sequence
        l_oRequest = GetNewRequest(l_sHost, "Login.aspx", m_oSession.Cookies);
        l_oRequest.Timeout = 5000;
        l_oRequest.ReadWriteTimeout = 5000;
        l_oRequest.Method = "POST";
        l_oRequest.Referer = "https://website.com";

        // Set form parameters
        string l_sFormParameters = "user=" + m_sUsername;

        // Convert them to the HTTP stream
        byte[] l_oRequestBuffer = UTF8Encoding.ASCII.GetBytes(l_sFormParameters);
        var l_oRequestStream = l_oRequest.GetRequestStream();
        l_oRequestStream.Write(l_oRequestBuffer, 0, l_oRequestBuffer.Length);

        // I'm setting this to false because otherwise i can't get the cookies i want. And I love them cookies!
        l_oRequest.AllowAutoRedirect = false;

        // Now start the redirection sequence until we get to what we want
        int l_iDTPos = -1;
        // This line hangs
        l_oResponse = (HttpWebResponse)l_oRequest.GetResponse();
        while (l_oResponse.StatusCode == HttpStatusCode.Found)
        {
                // Yada Yada

これは GetNewRequest 関数です。

    private HttpWebRequest GetNewRequest(string host, string targetUrl, CookieContainer a_oCookieJar)
    {
        HttpWebRequest l_oRequest = (HttpWebRequest)HttpWebRequest.Create(host + targetUrl);
        l_oRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2";
        l_oRequest.ContentType = "application/x-www-form-urlencoded";
        l_oRequest.AllowAutoRedirect = false;
        l_oRequest.CookieContainer = a_oCookieJar;

        return l_oRequest;
    }

ドキュメントで 3.5 と 4 の間の変更を見つけることができませんでした。誰かがそのような問題に遭遇しましたか?

4

2 に答える 2

4

HttpWebRequestを使用してRESTfulサービスを呼び出していたときに、この同じ問題が発生しました。コードは.Net 4+で正常に機能し、.Net 3.5、3.0のGetResponse()行でハングしました。2.0。私はこの記事のサンプルコードを試してみました:

http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

.Netのすべてのバージョンで機能するようになりました。私は何か正しいものを設定したり、リソースを閉じたりしていなかったと思いますが、これをヒットした他の人は記事を試してみてください。

于 2012-12-07T17:38:51.643 に答える
0

次のリンクで指定されたコードを使用してみてください。Stream クラスを使用して、作成された httpwebrequest の休息データを取得します。

http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.getresponsestream.aspx

http://forums.asp.net/t/1178426.aspx/1

于 2012-10-29T11:56:16.963 に答える