第一次请求后,应用程序挂在GetRequestStream()上 [英] Application hangs on GetRequestStream() after first request

查看:589
本文介绍了第一次请求后,应用程序挂在GetRequestStream()上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在这里搜索和搜索.有些人认为流没有关闭,另一些人认为这是ServicePointManager.DefaultConnectionLimit设置为1的连接限制.但是,这些似乎都不起作用.

I've googled and searched here. Some suggest that streams were not being close, others suggested that it's a connection limit with ServicePointManager.DefaultConnectionLimit being set to 1. However, none of these seem to work.

我的问题是,当我第一次使用它时,它会起作用:

My problem is, when i use this for the first time, it works:

using (var stream = request.GetRequestStream())
{
     var data = Encoding.UTF8.GetBytes(post.ToString());
     stream.Write(data, 0, data.Length);
}

当我第二次使用它时,它会冻结.是的,我正在处理我的信息流,是的,我正在中止并关闭我的响应和请求.

When I use it a second time, it freezes. Yes, I'm disposing my stream, yes im Aborting and closing my response and requests.

这是我的整个代码段:

public string get_hash(string strUsername, string strPassword, string strUniverse)
        {
            // Request VAR
            var request = (HttpWebRequest)WebRequest.Create("http://website.com/");
            // Response VAR
            var response = (HttpWebResponse)request.GetResponse();
            // Cookie Var
            var cookie = new CookieContainer();

            ServicePointManager.DefaultConnectionLimit = 100;            
            request.Timeout = 10;

            request = (HttpWebRequest)WebRequest.Create("http://website.com/main/login");

            request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
            request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
            request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
            request.Headers.Add("Accept-Language", "en-US,en,q=0.8");
            request.Headers.Add("Cache-Control", "max-age=0");
            request.ContentType = "application/x-www-form-urlencoded";
            request.Host = "website.com";
            request.Headers.Add("Origin", "http://website.com");
            request.Referer = "http://website.com/";
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36";
            request.Method = "POST";

            request.CookieContainer = new CookieContainer();
            request.CookieContainer.Add(cookie.GetCookies(request.RequestUri));

            // SET POST DATA HERE
            var post = HttpUtility.ParseQueryString(string.Empty);
            post.Add("uni", strUni);
            post.Add("login", strUsername);
            post.Add("pass", strPassword);

            using (var stream = request.GetRequestStream())
            {
                var data = Encoding.UTF8.GetBytes(post.ToString());
                stream.Write(data, 0, data.Length);
                stream.Close();
                stream.Dispose();
            }

            response = (HttpWebResponse)request.GetResponse();

            string strSSID = "Failed";

            if (response.StatusCode == HttpStatusCode.OK)
            {
                var data = string.Empty;
                using (var sReader = new StreamReader(response.GetResponseStream()))
                {
                    data = sReader.ReadToEnd();
                    sReader.Close();
                    sReader.Dispose();
                }

                string strSSIDurl = response.ResponseUri.ToString();

                int intSSIDurlStart = strSSIDurl.IndexOf("PHPSESSID=") + 10;
                strSSID = strSSIDurl.Substring(intSSIDurlStart);
            }

            request.Abort();
            response.Close();
            response.Dispose();

            return strSSID;
        }

推荐答案

您没有处理第一个请求的响应.

you are not disposing the response from the first request.

var request = (HttpWebRequest)WebRequest.Create("http://website.com/");
var response = (HttpWebResponse)request.GetResponse(); // Not disposed

我们遇到了类似的问题,正确处理响应对我们有帮助.

We had similar problem and disposing the response properly helped us.

这篇关于第一次请求后,应用程序挂在GetRequestStream()上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆