gpt4 book ai didi

c# - 我第二次在 HttpPost 中使用 "getResponse()",它只能逐步调试

转载 作者:太空宇宙 更新时间:2023-11-03 16:37:01 25 4
gpt4 key购买 nike

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

异常是:错误代码 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
}
}

最佳答案

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

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

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

关于c# - 我第二次在 HttpPost 中使用 "getResponse()",它只能逐步调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8801028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com