4

I have trouble following the examples to get the callback.

I have the following code:

 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
        {  }
    }

I have been bangin my head against this all day, I can see the get request in my browser, or with client in fiddler/wireshark. But the code (ReadWebRequestCallback) does not get called.

Edit: Also note that if I use WebClient and DownloadStringAsync it works, but i need other HTTP status codes than 404 and 200.:

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

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

2 に答える 2

1

これが解決策かどうかはわかりませんが、コールバックが呼び出される前に所有しているスレッドは閉じられていますか?Silverlightであるため、私はそれを疑っていますが、私はそれを持ち出すと思いました。

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetresponse.aspxを確認してください-

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();

それはあなたがThread.Sleepを試してみるべきものかもしれません。これが問題ではない場合は、安全のためにブレークポイントまたはその他の出力ステートメントを追加して、コードが起動しないことを確認できますか?

于 2012-07-10T15:28:05.143 に答える
0

助けてくれてありがとう!

私は、タスクを使用したSL5のタスクを使用した非同期ネットワークの簡素化で説明されているようにこれを行うことになりました。

HttpWebRequest _request;

private void doGetRequest()
  _request = WebRequestCreator.ClientHttp.Create(new Uri("http://localhost/getDummy")) as HttpWebRequest;
        var webTask = Task.Factory.FromAsync<WebResponse>
            (_request.BeginGetResponse, _request.EndGetResponse, null)
          .ContinueWith(
            task =>
            {
                var response = (HttpWebResponse)task.Result;
                // The reason I use HttpRequest, not WebRequest, to get statuscode.
                if (response.StatusCode == HttpStatusCode.ServiceUnavailable)
                {
                     //Do Stuff
                }
            });

ただし、問題は、コールバックにあるときにログがログに記録されなかったことに依存していると思います。これは理解できません。でも、1日壁に頭をぶつけた後、それを置き去りにします。しかし、私の実際の投稿はうまくいくと思います。

于 2012-07-10T20:00:52.137 に答える