2010-01-15 33 views
0

我有一个用C#编写的浏览器帮助对象,当用户点击Windows窗体上的一个按钮时,会向我的服务器发出一个HTTPWebRequest POST,并且在正常情况下,这很有效。然而,每隔一段时间,我就会得到一个似乎疯狂的BHO,并不断向我发送大量的HTTPWebRequests(大约每分钟50到100个)。唯一的办法,我已经能够阻止行为,让客户端重新启动他们的电脑,通常用户甚至已关闭IE浏览器,但邮政继续滚动英寸失控HTTPWebRequest

有没有人见过类似的行为,当使用HTTPWebRequest?它几乎看起来像连接中的一些重试逻辑变得疯狂,但我不认为HTTPWebRequest内置任何重试机制,所以这似乎不太可能。

我正在建立我的连接不正确,是否有防止类似这样的好策略?

下面是我设置我的连接:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(myUrl); 
webRequest.Timeout = 30000; 
webRequest.Method = "POST"; 
webRequest.KeepAlive = false; 
System.Net.ServicePointManager.Expect100Continue = false; 
webRequest.ContentType = "text/xml"; 
webRequest.ContentLength = myData.Length; 

using (StreamWriter requestWriter = new StreamWriter(webRequest.GetRequestStream())) 
{ 
    requestWriter.Write(this.myData); 
    requestWriter.Close(); 
} 
+0

那么,按钮实际上是在BHO中还是BHO连接到其他东西?是否有可能,无论是看这个点击发生是卡在一个循环或有一个几乎不应该失败,但显然是? – 2010-01-15 18:22:26

+0

对不起,“竞赛条件” – 2010-01-15 18:33:09

+0

该按钮是在我的BHO,它基本上像一个常规的Windows窗体应用程序设置。我点击按钮,它触发按钮的事件处理程序,然后发出Web请求。 – Millhouse 2010-01-15 18:55:38

回答

0

可以让客户得到他的电脑Wireshark的一个跟踪时,发生这种情况?

是否有一些其他对象托管IE控件,这又会导致您的BHO被托管并开始触发请求?

不幸的是,除非你能在你的机器上得到一个repro,否则它只是在黑暗中拍摄而已。

+0

有趣的想法,不幸的是一直无法得到这个东西repro。我将不得不考虑在普通用户的桌面上托管IE控件的方式。 – Millhouse 2010-01-15 20:37:34

+0

尝试双击或三击“提交”按钮。许多用户不能“获得”双击目标和单个答题器(链接,按钮,快捷方式图标等)之间的区别。我想不出究竟是什么,但当第一个完成之前尝试第二个相同的请求时,可能会有*东西*处理事情。 – Jay 2010-01-15 22:23:41

+0

这是要尝试的东西,我应该禁用点击处理程序中的按钮,直到我确定我的请求已完成,并且还会防止出现此情况。 – Millhouse 2010-01-19 16:09:14