我正在尝试使用Windows Phone 7模拟器对Huddle API进行身份验证。但是,我没有取得任何成功。我一直得到“远程服务器返回错误:NotFound”。我甚至试图“减少”我的代码,只是尝试一个直接的网站,例如。谷歌但仍然得到相同的结果。
我有以下代码:
string url = "http://www.google.com";
HttpWebRequest client= WebRequest.CreateHttp(new Uri(url)) as HttpWebRequest;
client.AllowReadStreamBuffering = true;
// Call and handle the response.
client.BeginGetResponse(
(asResult) =>
{
Dispatcher.BeginInvoke(
() =>
{
try
{
var response = client.EndGetResponse(asResult);
System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream());
string responseString = reader.ReadToEnd();
}
catch (WebException failure)
{
throw failure;
}
});
},
null
);
执行总是在catch部分结束。但是,看过Fiddler2后,google.com似乎没有任何流量。所以似乎没有提出要求。
我在这里看到了类似的问题Retrieve XML from https using WebClient/HttpWebRequest - WP7,但我使用的是标准端口,因此不确定这是否相关。我也尝试按照帖子简化代码,但没有成功。
有趣的是,最可能的选择似乎是因为我可能没有按照HttpWebRequest Breaks On WP7在我的AppManifestWM.xaml文件中定义网络功能,但我的AppManifestWM.xaml文件似乎已定义:
<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2009/deployment" AppPlatformVersion="7.0">
<App xmlns="" ProductID="{ac5b5d62-573c-4134-b290-0ad4f678ad7f}" Title="xxx.WindowsPhone7.Client" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="xxx.WindowsPhone7.Client author" Description="Sample description" Publisher="xxx.WindowsPhone7.Client publisher">
<IconPath IsRelative="true" IsResource="false">ApplicationIcon.png</IconPath>
<Capabilities>
<Capability Name="ID_CAP_NETWORKING" />
<Capability Name="ID_CAP_LOCATION" />
<Capability Name="ID_CAP_SENSORS" />
<Capability Name="ID_CAP_MICROPHONE" />
<Capability Name="ID_CAP_MEDIALIB" />
<Capability Name="ID_CAP_GAMERSERVICES" />
<Capability Name="ID_CAP_PHONEDIALER" />
<Capability Name="ID_CAP_PUSH_NOTIFICATION" />
<Capability Name="ID_CAP_WEBBROWSERCOMPONENT" />
</Capabilities>
<Tasks>
<DefaultTask Name ="_default" NavigationPage="MainPage.xaml"/>
</Tasks>
<Tokens>
<PrimaryToken TokenID="xxx.WindowsPhone7.ClientToken" TaskName="_default">
<TemplateType5>
<BackgroundImageURI IsRelative="true" IsResource="false">Background.png</BackgroundImageURI>
<Count>0</Count>
<Title>xxx.WindowsPhone7.Client</Title>
</TemplateType5>
</PrimaryToken>
</Tokens>
</App>
</Deployment>
所以我很茫然。该请求实际上似乎并没有发生,导致我认为某些东西正在阻止它。
更新
没有任何改变,但认为这个堆栈跟踪可能是heko:
System.Net.WebException未处理 Message =远程服务器返回了一个 错误:NotFound。堆栈跟踪: 在System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult) asyncResult) 在System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult) asyncResult) 在xxx.WindowsPhone7.Client.Views.AddHuddleUserPage。&lt;&gt; c__DisplayClass2。&lt;&gt; c__DisplayClass4.b__1() 在System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi,Object obj,BindingFlags invokeAttr,Binder binder,Object 参数,CultureInfo文化, Boolean isBinderDefault,Assembly 调用者,布尔验证访问, StackCrawlMark&安培; stackMark) 在System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数, CultureInfo culture,StackCrawlMark&amp; stackMark) 在System.Reflection.MethodBase.Invoke(Object obj,Object []参数) 在System.Delegate.DynamicInvokeOne(Object [] 参数) 在System.MulticastDelegate.DynamicInvokeImpl(Object [] 参数) 在System.Delegate.DynamicInvoke(Object [] 参数) 在System.Windows.Threading.DispatcherOperation.Invoke() 在System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority 优先) 在System.Windows.Threading.Dispatcher.OnInvoke(Object 上下文) 在System.Windows.Hosting.CallbackCookie.Invoke(Object [] 参数) 在System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object [] 参数) 在System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle,Int32 nParamCount, ScriptParam [] pParams,ScriptParam&amp; pResult)
状态为 System.Net.WebExceptionStatus.UnknownError
感谢您的时间。
答案 0 :(得分:6)
在开发 Windows Phone 应用时,从未使用过 Fiddler2 但遇到同样的问题。
对我而言,原因完全不同: WMAppManifest.xml 刚刚缺少ID_CAP_NETWORKING!
由于我得到了“未找到”异常,而不是“不支持的异常”,我几乎尝试了其他所有内容,直到找到问题的真正原因......; - )
我更喜欢禁用所有CAPS并且只启用应用真正需要的CAPS,因为如果应用需要访问“所有内容”,用户将无法理解/接受; - )
答案 1 :(得分:3)
我工作了几个小时与原始海报完全相同的症状。然后我按照上面的建议关闭了Fiddler2。然后它的工作原理。没有更多“远程服务器返回并且错误:NotFound。”
魔术!谢谢你,凯莉布。本应投票但我没有足够的信用。
答案 2 :(得分:2)
你有小提琴手跑吗?当Fiddler连接到我的网络堆栈时,我反复收到此错误。随着Fiddler关闭,没有问题。
如果有人知道,我会有兴趣听听背后的原因......
干杯
答案 3 :(得分:2)
关闭Fiddler2解决了我的问题。
答案 4 :(得分:1)
好的,我已经解决了......但不知道怎么做。我的机器没有重启,我的代码没有改变。唯一可能的解释是我的模拟器确实崩溃了几次。也许在那里。
感谢您的时间,这是我正在使用的代码,它适用于Huddle API:
string url = "https://api.huddle.net/v1/xml/workspaces"; ;
HttpWebRequest client= WebRequest.CreateHttp(new Uri(url)) as HttpWebRequest;
client.Credentials = new NetworkCredential(ViewModel.UserAccount.UserName, ViewModel.UserAccount.Password);
client.AllowReadStreamBuffering = true;
// Call and handle the response.
client.BeginGetResponse(
(asResult) =>
{
Dispatcher.BeginInvoke(
() =>
{
try
{
var response = client.EndGetResponse(asResult);
System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream());
string responseString = reader.ReadToEnd();
}
catch (WebException failure)
{
MessageBox.Show(failure.Message, "Cannot authenticate", MessageBoxButton.OK);
#if DEBUG
throw failure;
#endif
}
});
},
null
);
答案 5 :(得分:0)
这可能只是解决您的网络连接问题。
您可以通过IE和应用内的WebBrowser控件访问网络吗?
你可能有代理方式。看看这个doco在这方面是否有帮助。