Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#-HttpWebRequest异常所经历的延迟差异_C#_.net_Httpwebrequest - Fatal编程技术网

c#-HttpWebRequest异常所经历的延迟差异

c#-HttpWebRequest异常所经历的延迟差异,c#,.net,httpwebrequest,C#,.net,Httpwebrequest,当HttpWebRequest处理500服务器错误时,我遇到了一些非常奇怪的行为 在下面的代码示例中,您可以假设调用时立即返回500服务器错误 当我在我的桌面PC(运行Windows7的标准x86机器)上运行此代码时,会引发异常,我将其记录下来,该方法立即完成。这是我想要的行为 当我在开发服务器(独立主机上的vmware来宾计算机,运行Windows server 2008 R2 Standard的Xeon x64)上运行此代码时,会立即引发异常,但该方法大约需要15秒才能完成(在引发异常之后)

当HttpWebRequest处理500服务器错误时,我遇到了一些非常奇怪的行为

在下面的代码示例中,您可以假设调用时立即返回500服务器错误

当我在我的桌面PC(运行Windows7的标准x86机器)上运行此代码时,会引发异常,我将其记录下来,该方法立即完成。这是我想要的行为

当我在开发服务器(独立主机上的vmware来宾计算机,运行Windows server 2008 R2 Standard的Xeon x64)上运行此代码时,会立即引发异常,但该方法大约需要15秒才能完成(在引发异常之后)

我的问题是——是什么导致了两次测试中观察到的行为差异

(这两种方法的运行条件是相同的,即我没有在桌面上运行Visual Studio中的代码,这两种方法都在相同的服务包装器中运行)

如果您能提供任何帮助,我们将不胜感激

    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