2012-07-10 5 views
4

콜백을 얻기 위해 예제를 따르는 데 문제가 있습니다. 나는 모든 일이에 내 머리를 Bangin 넣어 한BeginGetResponse에서 콜백을 수신하지 않음

private void startWebRequest(object sender, EventArgs e) 
    { 
     Uri url = new Uri("http://localhost.com/dummyGet"); 
     HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); 
     request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), request); 
    } 

    private void ReadWebRequestCallback(IAsyncResult callbackResult) 
    { 
     Console.WriteLine("Don not get here"); 
     try 
     { 
      var req = (HttpWebRequest)callbackResult.AsyncState; 
      using (var response = req.EndGetResponse(callbackResult)) 
      { 
       Console.WriteLine("Code"); 
      } 
     } 
     catch 
     { } 
    } 

, 내 브라우저에서 GET 요청을 참조하거나 피들러/와이어 샤크에서 고객과의 수 :

나는 다음과 같은 코드가 있습니다. 하지만 코드 (ReadWebRequestCallback)가 호출되지 않습니다.

편집 : 또한 내가 웹 클라이언트와 DownloadStringAsync를 사용하는 경우 작동 있습니다,하지만 난이 솔루션의 경우 잘 모르겠어요 (404) 및 (200) :

_client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadStringCompleted); 
_client.DownloadStringAsync(_concurrentCheckUrl); 
} 

private void DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    {// Works, gets here} 
+0

try.BeginGetResponse를 시도해보고 예외가 발생하는지 확인하십시오. –

+0

예외가 발생하지 않는 것 같습니다. – Nitro

+0

빈'catch {}'를 사용하여 예외를 삼킨다는 것을 고려해보십시오. 어떻게하면 ReadWebRequest에 포함되지 않는지 어떻게 알 수 있습니까? – user7116

답변

0

모든 도움을 주셔서 감사합니다.

작업을 수행 할 때 Simplify Async networking with Tasks in SL5에 설명 된대로 작업을 마무리했습니다.

그러나이 문제는 콜백에있을 때 내 로깅이 기록되지 않는다고 생각합니다. 이해할 수 없습니다. 그러나 하루 동안 내 머리를 벽에 치고 난 후에, 나는 그 것을두고 갈 것이다. 하지만 내 실제 게시물이 효과가 있다고 생각해.

1

이외의 HTTP 상태 코드가 필요합니다 콜백이 호출되기 전에 소유 스레드가 닫혀 있습니까? 나는 실버 라이트라고 생각하지만 나는 그것을 가져올 것이라고 생각했다.

확인 http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetresponse.aspx은 - 당신이 Thread.sleep를 위로하려고한다 무엇을 할 수

ThreadPool.RegisterWaitForSingleObject (result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), myHttpWebRequest, DefaultTimeout, true); 

    // The response came in the allowed time. The work processing will happen in the 
    // callback function. 
    allDone.WaitOne(); 

알 수 있습니다. 이것이 문제가되지 않는다면 안전을 위해 중단 점이나 다른 출력 문을 추가하여 코드가 실행되지 않는다는 것을 확인할 수 있습니까?

+0

이것은 나의 가장 좋은 추측이다. startWebRequest()의 마지막 줄과 같이 호출을 실행 한 후 스레드를 몇 초 동안 잠자기 상태로 놓습니다. 스레드 문제인지 여부를 확인하는 것입니다. – matcheek

+0

예상되는 결과는 무엇입니까? 30 초짜리 Thread.Sleep (새로운 Timespan (0,0,30))을 추가했지만, 비디오의 시작이 지연된다는 것입니다. – Nitro

+0

쓰레드 슬립은 요청이 작업을 완료하도록 허용 할 것이지만, 수면 바로 뒤에있는 명령문이 종료를 일으키는 경우에는 실행되지 않습니다. 스레딩은 까다 롭고 Microsoft의 새로운 모델은 확실히 선두에 서 있습니다. 누가 'startWebRequest'를 호출합니까? –

관련 문제