第二次在HttpPost中使用“getResponse()”时,它只能逐步调试

时间:2012-01-10 09:33:42

标签: c# visual-studio-2010 debugging http-post

我在VS2010,FrameWork 4.0上使用C#。 我写了一个控制台应用程序,按顺序进行两次Http-Post调用。 第二个调用在输入中使用第一个返回的内容。 好吧,当我在调试模式下运行应用程序时,使用断点一步一步(F10),一切正常。 但是如果我删除断点并按下" F5",当我的代码执行时会出现异常" webRequest.getResponse()"在SECOND Http-Post调用中,可能是因为超时,因为错误大约需要60秒。

例外情况是:ErrorCode 10054 - 远程主机强行关闭了连接。

这是我的应用程序使用的类(控制台应用程序调用方法"搜索"):

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Net;
using System.IO;

namespace MyNamespace
{
    public class MyClass
    {
        private string SearchId { get; set; }
        private string XmlOutputSearch { get; set; }

        public MyClass()
        {
            SearchId = "";
            XmlOutputSearch = "";
        }

        public string Search()
        {
            StartSearch();
            CheckResults();
            return XmlOutputSearch;
        }

        public void StartSearch()
        {
            string sInput = "[myStartSearchXmlRequest]";
            string sOutput = HttpPost(sInput);

            XmlDocument myXmlDoc = new XmlDocument();
            myXmlDoc.LoadXml(sOutput);
            SearchId = myXmlDoc.SelectSingleNode("//SearchId").InnerXml;
        }

        public void CheckResults()
        {
            string sInput = "[myCheckResultsXmlRequest using SearchId]";
            XmlOutputSearch = HttpPost(sInput);
        }

        private string HttpPost(string parameters)
        {
            try
            {
                HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create("[myURI]");

                webRequest.ContentType = "text/xml";
                webRequest.Method = "POST";

                byte[] bytes = Encoding.ASCII.GetBytes(parameters);
                Stream os = null;
                try
                { // send the Post
                    webRequest.ContentLength = bytes.Length;   //Count bytes to send
                    os = webRequest.GetRequestStream();
                    os.Write(bytes, 0, bytes.Length);         //Send it
                }

                catch (WebException ex)
                {
                    throw ex;
                }
                finally
                {
                    if (os != null)
                    {
                        os.Close();
                    }
                }

                try
                { // get the response

                    // Here I get the exception, on webRequest.GetResponse(), when HttpPost is called 
                    // by CheckResults, if not in Step-By-Step mode
                    using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse()) 
                    {
                        if (webResponse == null)
                        { return null; }
                        StreamReader sr = new StreamReader(webResponse.GetResponseStream());
                        string sReturn = sr.ReadToEnd().Trim();
                        sr.Close();
                        webResponse.Close();
                        webRequest.Abort();

                        return sReturn;
                    }
                }
                catch (WebException wex)
                {
                    // This exception will be raised if the server didn't return 200 - OK  
                    // Try to retrieve more information about the network error  
                    if (wex.Response != null)
                    {
                        using (HttpWebResponse errorResponse = (HttpWebResponse)wex.Response)
                        {
                            Console.WriteLine(
                                "The server returned '{0}' with the status code {1} ({2:d}).",
                                errorResponse.StatusDescription, errorResponse.StatusCode,
                                errorResponse.StatusCode);
                        }
                    }
                }
            }
            catch (Exception excep)
            {
                Console.WriteLine("Exception in WebResponse. " + excep.Message + " - " + excep.StackTrace);
            }
            return null;
        } // end HttpPost 
    }
}

1 个答案:

答案 0 :(得分:0)

您是否曾尝试查看事件日志中是否有任何错误?尝试在您的服务上启用Tracing以了解确切原因。发生上述错误有以下描述:

通过对等方重置连接。 远程主机强制关闭现有连接。如果远程主机上的对等应用程序突然停止,主机重新启动,主机或远程网络接口被禁用,或远程主机使用硬关闭,则通常会产生这种情况(有关远程主机上SO_LINGER选项的更多信息,请参阅setsockopt)插座)。如果由于保持活动活动在一个或多个操作正在进行时检测到故障而导致连接中断,则也可能导致此错误。正在进行的操作因WSAENETRESET而失败。后续操作因WSAECONNRESET而失败。

参考:http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx