【发布时间】:2012-02-23 18:43:46
【问题描述】:
你遇到过这个问题吗?我运行的代码与this previous question 中的代码非常相似,当处于 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;
}
【问题讨论】:
-
我很感兴趣。源代码,请。 :-)
-
添加源代码...
-
服务器发送的 content-length 头是否与内容的实际长度匹配?
-
不,返回的内容长度标头是-1。但是,当我使用 Fiddler 检查响应时,响应正文中有实际内容。
-
也许设置 request.KeepAlive=false 会有所帮助...