C# 尝试从FitNesse REST URI读取响应时发生连接关闭错误

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

你遇到过这个问题吗?我运行的代码与a中的代码非常相似,当处于nUnitTest模式时,URI包含“/?test&format=xml”nUnit测试失败,而IOException“无法从传输连接读取数据:连接已关闭”

然而,当时运行的Fiddler跟踪显示了我所期望的xml

我重新创建的请求头与通过浏览器发送的请求头完全相同(几乎相同)

最后,如果我从URI中去掉“/?test&format=xml”,我将得到我原本期望的html

源代码:

    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);
}