c#-HttpWebRequest异常所经历的延迟差异
当HttpWebRequest处理500服务器错误时,我遇到了一些非常奇怪的行为 在下面的代码示例中,您可以假设调用时立即返回500服务器错误 当我在我的桌面PC(运行Windows7的标准x86机器)上运行此代码时,会引发异常,我将其记录下来,该方法立即完成。这是我想要的行为 当我在开发服务器(独立主机上的vmware来宾计算机,运行Windows server 2008 R2 Standard的Xeon x64)上运行此代码时,会立即引发异常,但该方法大约需要15秒才能完成(在引发异常之后) 我的问题是——是什么导致了两次测试中观察到的行为差异 (这两种方法的运行条件是相同的,即我没有在桌面上运行Visual Studio中的代码,这两种方法都在相同的服务包装器中运行) 如果您能提供任何帮助,我们将不胜感激c#-HttpWebRequest异常所经历的延迟差异,c#,.net,httpwebrequest,C#,.net,Httpwebrequest,当HttpWebRequest处理500服务器错误时,我遇到了一些非常奇怪的行为 在下面的代码示例中,您可以假设调用时立即返回500服务器错误 当我在我的桌面PC(运行Windows7的标准x86机器)上运行此代码时,会引发异常,我将其记录下来,该方法立即完成。这是我想要的行为 当我在开发服务器(独立主机上的vmware来宾计算机,运行Windows server 2008 R2 Standard的Xeon x64)上运行此代码时,会立即引发异常,但该方法大约需要15秒才能完成(在引发异常之后)
void MakeRequest(StringBuilder postParams)
{
var req = (HttpWebRequest)WebRequest.Create("http://example.com/service.endpoint");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.KeepAlive = false;
string postData = postParams.ToString();
req.ContentLength = postData.Length;
req.Timeout = 10000;
Console.WriteLine("Requested started.");
var stOut = new StreamWriter(req.GetRequestStream(), Encoding.ASCII);
stOut.Write(postData);
stOut.Close();
WebResponse response = null;
try
{
response = req.GetResponse();
Stream receiveStream = response.GetResponseStream();
// Deal with response here
response.Close();
Console.WriteLine("Request completed.");
}
catch (Exception ex)
{
if (response != null) response.GetResponseStream().Close();
req.Abort();
Console.WriteLine("Exception with request raised: {0}", ex);
}
// Delay is observed between above "Exception with request.." and following line:
Console.WriteLine("MakeRequest() has completed.");
}
编辑:使延迟在哪里更清楚
下面显示了此调用生成的日志的大量编辑版本。它用于显示在服务器上观察到的大部分延迟(这在我的桌面上看不到):
这里有各种可能性-DNS查找、代理等 我建议你安装在有问题的机器上,看看到底发生了什么-这应该会告诉你问题出在哪里
(顺便说一句,我强烈建议您对写入程序、流、
WebResponses
等使用using
语句。我不认为这是问题所在,但如果发生无法关闭WebResponse
的情况,您可能会因为连接池而导致将来对同一主机的请求超时。)谢谢您的回复,Jon。我不相信它是DNS,因为问题发生在异常出现之后,表明有500个错误,并且在请求完成之前。访问服务端点时出现问题我希望延迟从服务器获得响应,这就是我现在看到的。这应该是“不是我看到的”,而不是“现在我看到的”…)@rvxnet:不清楚你的意思-你有什么计时日志?你到底在哪里看到了延迟?延迟存在于两行之间:“请求引发异常…”和“MakeRequest()已完成”@rvxnet:我觉得很难相信。如果您直接在“Exception with request riased”行之后和“MakeRequest has completed”行之前记录当前时间,您真的看到了15秒的间隔吗?我并不想怀疑你,但我以前从未经历过这样的事情,这听起来很疯狂。您能否更新您的示例,以显示用于观察延迟发生位置的代码?
2011-08-16 16:39:32,475 [STP OrderPool Thread #0] INFO - Submitting quote to REDACTED
2011-08-16 16:39:32,490 [STP OrderPool Thread #0] INFO - Invoking ASSEMBLY_NAME_REDACTED, Version=1.0.4245.27855, Culture=neutral, PublicKeyToken=null::REDACTED
2011-08-16 16:39:32,709 [STP OrderPool Thread #0] INFO - Sending request to: http://example.com/service.endpoint
2011-08-16 16:39:36,334 [STP OrderPool Thread #0] ERROR - Exception
System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
at System.Net.HttpWebRequest.GetResponse()
at HL.Services.Blackbird.LondonBestxHub.Reuters.Execute.MakeRequest(String serviceName, StringBuilder postParams)
2011-08-16 16:39:57,381 [STP OrderPool Thread #0] INFO - MakeRequest call completed