public int loginEmail(string email, string password)
{
HttpWebRequest request = null;
string responseStr = null;
string Email = email;
string Pass = password;
UTF8Encoding encoding = new UTF8Encoding();
string postData = "PostData";
byte[] data = encoding.GetBytes(postData);
request = (HttpWebRequest)WebRequest.Create("url");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.AllowAutoRedirect = false;
request.KeepAlive = false;
request.Proxy = null;
request.ServicePoint.ConnectionLimit = 1000;
request.ContentLength = data.Length;
request.Timeout = 5000;
request.ServicePoint.ConnectionLeaseTimeout = 5000;
request.ServicePoint.MaxIdleTime = 5000;
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
responseStr = response.Headers["Set-Cookie"];
}
}
catch
{
return 1;
}
string[] cooktemp;
string[] seperatortemp = new string[] { ";" };
cooktemp = responseStr.Split(seperatortemp, StringSplitOptions.None);
LoginHeaders[0] = cooktemp[0] + ";";
return 0;
}
此代码运行正常,但有时请求不会得到回复。当请求没有得到响应时,程序将挂起,然后最终会发出崩溃程序的超时错误。我现在要做的就是捕捉超时错误,以便我能够处理它,但似乎没有任何东西可以捕获它。
答案 0 :(得分:4)
最有可能在GetRequestStream()
超时。 documentation明确声明如果请求的超时期限过期,它可能会抛出WebException
。
因此,在try / catch中包含该代码块,您应该能够捕获它。
答案 1 :(得分:0)
这是一个老话题,但我今天也遇到了一个问题。
我没有意识到的是,如果您有一个Web服务,比如说,尝试写入已锁定的文件 ...那么将代码放在一个简单的{ {1}}还不够。
您必须专门拥有try..catch
来处理catch
。
WebExceptions
我一直认为try
{
// Run your web service code
}
catch (WebException ex)
{
// Handle a WebException, such as trying to write to a "locked" file on the network
}
catch (Exception ex)
{
// Handle a regular Exception
}
是WebException
的一种类型,所以这些会被Exception
处理程序捕获:
catch
它没有。
为避免您的代码丢失" 请求超时"消息,没有任何关于它们的原因的建议,请记得添加第二个catch (Exception ex)
{
// Handle a regular Exception
}
处理程序。
顺便说一下,在我的web services tutorial上,这里是我推荐的代码,它会查找异常,并在Response标头中返回它们:
catch
答案 2 :(得分:-1)