HttpWebRequest.BeginGetResponse在Windows Phone上导致System.NotSupportedException

时间:2012-04-10 20:53:06

标签: silverlight windows-phone-7 httpwebrequest

我发现类似的问题有been asked before但是所提供的解决方案都没有效果。

检查从BeginGetResponse方法返回的令牌,我看到引发了以下异常:

'token.AsyncWaitHandle' threw an exception of type 'System.NotSupportedException'

This页面告诉我这个异常意味着Callback参数是Nothing,但是我传递了回调 - 当插入断点时,调试器会进入回调方法。但是,回调中的request对象始终为null。我可以在回调方法中的result对象中查看相同的异常详细信息。

我在调用new AsyncCallback(ProcessResponse)

时尝试使用BeginGetResponse

我尝试添加request.AllowReadStreamBuffering = true;

我已经尝试过这个in-emulator和on-device,但两者都没有运气。

public static void GetQuakes(int numDays)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://magma.geonet.org.nz/services/quake/geojson/quake?numberDays=" + numDays);
    // Examining this token reveals the exception.
    var token = request.BeginGetResponse(ProcessResponse, request);
}

static void ProcessResponse(IAsyncResult result)
{
    HttpWebRequest request = result.AsyncState as HttpWebRequest;
    if (request != null)
    {
        // do stuff...
    }
}

所以我对于下一步的目标感到有点失落。

1 个答案:

答案 0 :(得分:1)

  

'token.AsyncWaitHandle'引发了类型异常   的 'System.NotSupportedException'

     

此页面告诉我此异常表示Callback参数是   没有

您正在查看的文档http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetresponse%28v=vs.95%29.aspx适用于BeginGetResponse。 Silverlight不使用AsyncWaitHandle,并正确抛出NotSupportedException。您正在看到异常System.NotSupportedException用于在您检查token时调用IAsyncResult.AsyncWaitHandle。

IAsyncResult.AsyncWaitHandle上的文档明确说明了IAsyncResult的实现是否会创建等待句柄http://msdn.microsoft.com/en-us/library/system.iasyncresult.asyncwaithandle(v=vs.95).aspx。担心这会让你走错路。

我认为你需要解决你所看到的实际问题。很高兴知道你调查了什么,但在这种情况下,它确实有助于解决问题。

代码应该有效,并且在if语句中测试时,ProcessResponse请求不应为null。我只是将您提供的代码复制到Windows Phone应用程序中并运行它没有任何问题。