Windows phone 7 WebRequestExtensions.GetCurrentNetworkInterface引发InvalidOperationException

Windows phone 7 WebRequestExtensions.GetCurrentNetworkInterface引发InvalidOperationException,windows-phone-7,Windows Phone 7,我想获取发出HttpWebRequest的networkinterface 我找到了这个函数HttpWebRequest还具有执行相同操作的GetCurrentNetworkInterface()方法 这是我的代码: HttpWebRequest httpWebRequest = HttpWebRequest.CreateHttp(new Uri(Url, UriKind.Absolute)); //this line throws InvalidOperationException

我想获取发出
HttpWebRequest
networkinterface

我找到了这个函数
HttpWebRequest
还具有执行相同操作的
GetCurrentNetworkInterface()
方法

这是我的代码:

 HttpWebRequest httpWebRequest = HttpWebRequest.CreateHttp(new Uri(Url, UriKind.Absolute)); 
 //this line throws InvalidOperationException       
 NetworkInterfaceInfo i = httpWebRequest.GetCurrentNetworkInterface();
我从UI线程执行方法调用。如果我在
BeginGetResponse
之后打电话,异常会告诉“请求已完成”。这方面的解决办法是什么

例外信息:

消息为InvalidOperationException

堆栈跟踪:

  at System.Net.Browser.ClientHttpWebRequest.GetConnectionDetails(IntPtr& Details, Int32& sizeofDetails)
  at Microsoft.Phone.Net.NetworkInformation.WebRequestExtensions.GetCurrentNetworkInterface(WebRequest request)

我相信你可能想看看房子。文档说明它返回为当前internet请求提供服务的接口类型


如果这不是您想要的,您可能还想尝试这个类(我怀疑您可能已经看过这个选项)。我认为您可以使用IsCellularDataEnabled和IsWifiEnabled静态属性。

我想您可能想看看该属性。文档说明它返回为当前internet请求提供服务的接口类型

HttpWebRequest httpWebRequest = HttpWebRequest.CreateHttp(new Uri(Url, UriKind.Absolute));

httpWebRequest.BeginGetResponse(result =>
{
    // Handle response
}, null);

var info = WebRequestExtensions.GetCurrentNetworkInterface(httpWebRequest);
如果这不是您想要的,您可能还想尝试这个类(我怀疑您可能已经看过这个选项)。我认为可以使用IsCellularDataEnabled和IsWifiEnabled静态属性

HttpWebRequest httpWebRequest = HttpWebRequest.CreateHttp(new Uri(Url, UriKind.Absolute));

httpWebRequest.BeginGetResponse(result =>
{
    // Handle response
}, null);

var info = WebRequestExtensions.GetCurrentNetworkInterface(httpWebRequest);
我最近遇到了一个类似的问题,发现在
BeginGetResponse
之前不能调用
GetCurrentNetworkInterface
(因为尚未建立连接),但是如果在
BeginGetResponse
回调中调用,则请求已经完成,您会得到“Web请求已经完成”错误

由问题起始者添加:

完全工作代码,允许从后台线程获取
HttpWebRequest
NetworkInterfaceInfo
(本例中使用
BackgroundWorker
来模拟此操作):

全天调试后添加: 我不能让它100%的时间工作,尤其是当加载的页面很小的时候。在这种情况下,“请求完成”总是出现。但对于大负载页面,即使没有
EventWaitHandle

我最近遇到了一个类似的问题,发现在
BeginGetResponse
之前不能调用
GetCurrentNetworkInterface
(因为尚未建立连接),但是如果在
BeginGetResponse
回调中调用,则请求已经完成,您会得到“Web请求已经完成”错误

由问题起始者添加:

完全工作代码,允许从后台线程获取
HttpWebRequest
NetworkInterfaceInfo
(本例中使用
BackgroundWorker
来模拟此操作):

全天调试后添加:

我不能让它100%的时间工作,尤其是当加载的页面很小的时候。在这种情况下,“请求完成”总是出现。但是对于大加载页面,即使没有
EventWaitHandle

,它也可以工作。我猜,
invalidooperationexception
消息是完全空白的,因为您没有发布它?是的。出于好奇,您为什么需要此信息?它是用于执行连接测量的应用程序,因此我需要知道此测试中使用的连接类型。让我猜,
invalidoOperationException
消息完全为空,因为您没有发布它?是的。出于好奇,仅
InvalidOperationException
您为什么需要此信息?此信息用于执行连接测量的应用程序,因此我需要知道此测试中使用的连接类型。
NetworkInterface.NetworkInterfaceType
不适用于我,因为我使用网络要求,因此,查询不是在默认网络接口上执行的。另外,我还需要
NetworkInterfaceInfo
以在具有此参数的
ResolveHostNameAsync
中使用。我怎样才能用另一种方式得到它?我以前用作解决方法的套接字今天也发现了一个问题
NetworkInterface。NetworkInterfaceType
不适用于我,因为我使用网络要求,所以查询不是在默认网络接口上执行的。另外,我还需要
NetworkInterfaceInfo
以在具有此参数的
ResolveHostNameAsync
中使用。我怎样才能用另一种方式得到它?我以前用作解决方法的套接字今天也发现了一个问题是的,我也看到了同样的问题。来自msdn的示例也有try/catch,他们可以从中获取网络信息,所以似乎他们也无法获取这些信息……不过上面的代码对我来说很有用。在实际的代码中,我确实将其放入了try/catch中,因为我认为UI线程可能会被阻塞足够长的时间,以便在检索信息之前返回响应。谢谢,伙计。我想,我试着把这条线放在任何地方,但这行得通!是的,我想通过一个非常快速的请求,请求可能会在检索信息之前完成。我刚刚快速浏览了MSDN文章,它在代码注释中指出“可能在调用GetCurrentNetworkInterface之前完成。如果需要,请用运行时间更长的请求替换它”。这似乎有点荒谬。是的,我也看到了同样的情况。来自msdn的示例也有try/catch,他们可以从中获取网络信息,所以似乎他们也无法获取这些信息……不过上面的代码对我来说很有用。在实际的代码中,我确实将其放入了try/catch中,因为我认为UI线程可能会被阻塞足够长的时间,以便在检索信息之前返回响应。谢谢,伙计。我想,我试着把这条线放在任何地方,但这行得通!是的,我想通过一个非常快速的请求,请求可能会在检索信息之前完成。我刚刚快速浏览了MSDN文章,它在代码中有说明