C# 尝试从FitNesse REST URI读取响应时发生连接关闭错误
你遇到过这个问题吗?我运行的代码与a中的代码非常相似,当处于nUnitTest模式时,URI包含“/?test&format=xml”nUnit测试失败,而IOException“无法从传输连接读取数据:连接已关闭” 然而,当时运行的Fiddler跟踪显示了我所期望的xml 我重新创建的请求头与通过浏览器发送的请求头完全相同(几乎相同) 最后,如果我从URI中去掉“/?test&format=xml”,我将得到我原本期望的html 源代码:C# 尝试从FitNesse REST URI读取响应时发生连接关闭错误,c#,.net,rest,fitnesse,C#,.net,Rest,Fitnesse,你遇到过这个问题吗?我运行的代码与a中的代码非常相似,当处于nUnitTest模式时,URI包含“/?test&format=xml”nUnit测试失败,而IOException“无法从传输连接读取数据:连接已关闭” 然而,当时运行的Fiddler跟踪显示了我所期望的xml 我重新创建的请求头与通过浏览器发送的请求头完全相同(几乎相同) 最后,如果我从URI中去掉“/?test&format=xml”,我将得到我原本期望的html 源代码: public virtual bool Run
public virtual bool Run()
{
var request = CreateRequest();
var response = GetResponse(request);
var responseString = ReadResponse(response);
this.SetResults(responseString);
return this.IsSuccessful;
}
protected internal virtual HttpWebRequest CreateRequest()
{
var address = TestConfig.Address;
var request = (HttpWebRequest)WebRequest.Create(address);
request.Accept = "*/*";
request.UseDefaultCredentials = true;
request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
return request;
}
protected internal virtual HttpWebResponse GetResponse(HttpWebRequest request)
{
var response = (HttpWebResponse) request.GetResponse();
return response;
}
protected internal virtual string ReadResponse(HttpWebResponse response)
{
var stream = response.GetResponseStream();
var responseString = ReadResponse(stream);
stream.Close();
response.Close();
return responseString;
}
protected internal virtual string ReadResponse(Stream stream)
{
var reader = new StreamReader(stream);
var responseString = reader.ReadToEnd();
return responseString;
}
错误消息“无法从传输连接读取数据:连接已关闭”。这与您看到Fiddler返回html响应正文的事实无关
检查HttpWebResponse的状态码(如果确定,则应为200),并将请求包装在try/catch块中(来自的示例)
如果您正在快速创建和处理HttpWebRequest对象,则可能会使套接字在关闭时进入time_wait状态,然后在完全关闭之前无法再次打开它。如果是这种情况,请考虑使用其他端口或更改连接的使用时间。我很感兴趣。源代码,请::-)添加了源代码…服务器发送的内容长度标头是否与内容的实际长度匹配?否,返回的内容长度标头为-1。但是,当我使用Fiddler检查响应时,响应正文中有实际内容。可能设置request.KeepAlive=false会有帮助。。。
try
{
// Creates an HttpWebRequest for the specified URL.
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
// Sends the HttpWebRequest and waits for a response.
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
if (myHttpWebResponse.StatusCode == HttpStatusCode.OK)
Console.WriteLine("\r\nResponse Status Code is OK and StatusDescription is: {0}",
myHttpWebResponse.StatusDescription);
// Releases the resources of the response.
myHttpWebResponse.Close();
}
catch(WebException e)
{
Console.WriteLine("\r\nWebException Raised. The following error occured : {0}",e.Status);
}
catch(Exception e)
{
Console.WriteLine("\nThe following Exception was raised : {0}",e.Message);
}