我有一种情况让我发疯,网上没有任何真正有用的信息。
我正在自动执行上传文件的手动过程。我实际上像 3 年前一样编写了这段代码,它运行了一年顺利,现在它间歇性地失败了。在查看我的请求和刚刚从浏览器发出的请求的 Fiddler 流量时,我看到的唯一区别是,在我的自动呼叫期间,在 Fiddler 中,我得到了这个红色圆圈,其中有一条线穿过它两次。
我的研究表明这个图标意味着客户中止了会话——我没有这样做。我为每个请求传递相同的 CookieContainer 对象。我不知道为什么会这样,但是如果我在 Fiddler 中查看记录行的属性,它会为我的自动请求说明:
SESSION STATE: Aborted.
...
X-ABORTED-WHEN: SendingResponse
...
== TIMING INFO ============
ClientConnected: 16:25:58.563
ClientBeginRequest: 16:25:58.566
GotRequestHeaders: 16:25:58.567
ClientDoneRequest: 16:25:58.567
Determine Gateway: 0ms
DNS Lookup: 0ms
TCP/IP Connect: 0ms
HTTPS Handshake: 0ms
ServerConnected: 16:25:58.207
FiddlerBeginRequest: 16:25:58.567
ServerGotRequest: 16:25:58.567
ServerBeginResponse: 16:25:58.922
GotResponseHeaders: 16:25:58.922
ServerDoneResponse: 16:25:59.268
ClientBeginResponse: 16:25:59.268
ClientDoneResponse: 16:25:59.268
我使用浏览器获得的日志中的同一行如下所示:
SESSION STATE: Done.
...
ClientConnected: 10:33:09.347
ClientBeginRequest: 10:33:11.982
GotRequestHeaders: 10:33:11.982
ClientDoneRequest: 10:33:11.982
Determine Gateway: 0ms
DNS Lookup: 0ms
TCP/IP Connect: 0ms
HTTPS Handshake: 0ms
ServerConnected: 10:33:08.050
FiddlerBeginRequest: 10:33:11.982
ServerGotRequest: 10:33:11.982
ServerBeginResponse: 10:33:12.337
GotResponseHeaders: 10:33:12.337
ServerDoneResponse: 10:33:12.511
ClientBeginResponse: 10:33:12.511
ClientDoneResponse: 10:33:12.514
所以“完成”与“中止”。我从来没有在请求中调用过 Abort,我也没有收到任何异常。这是我发生中止的代码:
using (WebResponse httpResponse = httpRequest.GetResponse())
{
if (!httpResponse.ResponseUri.AbsoluteUri.Equals(string.Format("{0}main.htm", url), StringComparison.CurrentCultureIgnoreCase))
{
throw new Exception("Log in failed. Check the Username and Password information in the Setting table.");
}
httpResponse.Close();
}
我试过去掉“使用”(即使是推荐的)和“关闭”(也推荐),但它仍然被中止。
我很感激