【发布时间】:2017-08-29 23:32:40
【问题描述】:
编辑:在与几个 IT 人员讨论后,我意识到只有 POLL 请求有问题。我通过 GET 请求获取图像,无论 POLL 消息是否有问题,这些请求都按预期快速通过。
我正在开发一个客户端,以便在 C# 中与 IP 摄像机接口。
除了在不使用 Fiddler(一种网络流量检查代理)时,我的 http 请求性能非常差之外,这一切都很好。
我正在使用 httpclient 发送我的请求,这是我实际发起轮询请求的代码:
public async Task<bool> SetPoll(int whichpreset)
{
string action = "set";
string resource = presetnames[whichpreset];
string value = presetvalues[whichpreset];
int requestlen = 24 + action.Length + resource.Length + value.Length;
var request = new HttpRequestMessage
{
RequestUri = new Uri("http://" + ipadd + "/res.php"),
Method = HttpMethod.Post,
Content = new FormUrlEncodedContent(new[]{
new KeyValuePair<string,string>("action",action),
new KeyValuePair<string,string>("resource",resource),
new KeyValuePair<string,string>("value",value)
}),
Version = new System.Version("1.1"),
};
HttpResponseMessage mess = await client.SendAsync(request);
if (mess.IsSuccessStatusCode)
{
return true;
}
else
{
return false;
}
}
当 Fiddler 启动时,我的所有 http 请求都会快速通过,并且不会出现故障(我在连接时发出了大约 20 个 post 请求)。没有它,他们只会按预期完成约 1/5 的时间,而其余时间他们永远不会完成,这是一个大问题。另外,初始连接请求在不使用 Fiddler 时通常需要 1 分钟以上,而我使用时始终只需要几秒钟,因此连接后过早发送请求似乎不是时间问题。
这让我认为,所写的请求表现得相当糟糕,也许 Fiddler 的请求表现得更好。我是 HTTP 的新手,所以我不确定为什么会这样。我的问题:
- Fiddler 是否修改 HTTP 请求(例如不同的标头等) 因为它们被发送到服务器?
- 即使不修改请求,Fiddler 的请求在 某种方式比我在 C# 中退出 .net 4.0 时表现得更好 VS2013?
- 有没有办法改进我的模拟请求的行为 无论提琴手在做什么?理想情况下,仍然在 库存 HTTP 命名空间,但如有必要,我愿意使用其他命名空间。
如果有帮助,我会很乐意提供更多代码(尽管明天)。
【问题讨论】:
-
你能发布一个可复制、可复制和粘贴的代码吗? (仅与您的 http 代码有关)
-
当您说“1 分钟以上”时,可能会使用秒表并获得准确的时间。恰好 30 或 60 秒后失败表明存在超时问题。
-
@JohnWu 它变化很大。可能是 30 秒,也可能是 3 分钟。此外,它永远不会失败,只是根本没有 HTTP 响应。
-
还有@L.B 我会在几天后把它扔在那里。时间表在工作中发生了变化。它在自己的线程中调用以减少 UI 线程的负载。
标签: c# http post visual-studio-2013 fiddler