2010-01-15 3 views
0

사용자가 Windows 양식의 단추를 클릭 할 때 HTTPWebRequest POST를 C#으로 작성한 브라우저 도우미 개체가 있는데 정상적인 경우이 방법이 효과적입니다. 그러나 매번 너무 자주 미쳐서 지속적으로 HTTPWebRequests (분당 50-100 개)를 엄청나게 보내는 BHO를 받게됩니다. 클라이언트가 PC를 재부팅하도록 동작을 중지 할 수있는 유일한 방법은 종종 사용자가 IE를 종료했지만 POST가 진행되는 것입니다.제어 불능 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

Button은 실제로 BHO 내에 있습니까? 아니면 BHO가 다른 것에 연결되어 있습니까? 이 클릭이 발생하기를 바라는 것이 무엇이든간에 루프에 갇히거나 거의 실패해서는 안되지만 분명히 상승 조건이 있습니다. –

+0

미안, "경쟁 조건" –

+0

버튼은 내 BHO 내에 있으며, 기본적으로 일반 Windows 양식 앱처럼 설정됩니다. 단추를 클릭하면 단추에 대한 이벤트 처리기가 트리거되어 웹 요청이 만들어집니다. – Millhouse

답변

0

이 발생하는 경우 클라이언트가 자신의 PC에서 Wireshark를 추적을 얻을 가질 수 있습니다 : 여기

나는 나의 연결을 어떻게 설정하고있어인가?

IE 컨트롤을 호스팅하는 다른 객체가있을 수 있습니다. 그러면 BHO가 호스트되고 요청을 트리거하기 시작합니까?

기계에서 재현을 얻을 수 없다면, 어두운 곳에서 촬영할 수 있습니다.

+0

흥미로운 아이디어, 불행히도이 일을 repro에 얻을 수 없었습니다. 보통 사용자의 데스크톱에서 IE 컨트롤을 호스팅하는 것에 대해 생각해야 할 것입니다. – Millhouse

+0

제출 단추를 두 번 또는 세 번 클릭 해보십시오. 많은 사용자가 더블 클릭 대상과 단일 클릭 커 (링크, 단추, 바로 가기 아이콘 등) 사이의 구별을 "얻지"않습니다. 나는 정확히 무엇을 생각할 수는 없지만, 1 차가 완료되기 전에 2 차 동일한 요청이 시도 될 때 어떤 것이있을 수도 있습니다. – Jay

+0

그건 시도해 볼만한 것이고, 내 요청이 완료되었다는 확신이들 때까지 클릭 핸들러에서 버튼을 비활성화한다고 가정합니다. – Millhouse