2012-05-02 110 views
0

我一直在寻找我的问题的答案好几天,但可悲的是没有运气。我希望你们在这里能帮助我。如何从Windows Phone 7执行HttpWebRequests?

所以,我想要做的只是简单地调用delicious.com API,它将最近的书签返回给我(美味术语中的“帖子”)。因此,您只需使用以下URI并输入您的凭证以登录到delicious.com。

当我从一个标准的.NET4控制台应用程序中使用HttpWebRequest的神奇功能并设置证书时,它按预期工作。试图在WP7模拟器上执行相同的基本HttpWebRequest会导致WebException,指出“远程服务器返回错误:NotFound。”。 当深入探究这个异常时,我可以看到我的Response有一个StatusDescription为“未授权”。似乎没有认证发生。

接下来我试着 - 当我阅读设置凭证sometiemes导致问题 - 是直接设置“授权”RequestHeader。猜猜看,结果是一样的。

我结束了下面的代码,没有想法。我希望,这里有人能够帮助我,并指出一种方式,我如何能够从我的WP7中访问我的书签。

public void RetrieveRecentBookmarks(string userName, string password) 
{ 
    HttpWebRequest request = HttpWebRequest.CreateHttp(requestString); 

    byte[] bytes = System.Text.UTF8Encoding.UTF8.GetBytes(userName + ":" + password) 
    string authInfo = Convert.ToBase64String(bytes); 
    request.Headers[System.Net.HttpRequestHeader.Authorization] = "Basic " + authInfo; 

    RequestState state = new RequestState(request); 
    IAsyncResult result = request.BeginGetResponse(GetResponseCallback, state); 
} 

private static void GetResponseCallback(IAsyncResult asynchronousResult) 
{ 
    RequestState state = asynchronousResult.AsyncState as RequestState; 
    HttpWebRequest request = state.Request as HttpWebRequest; 

    // Here is where it breaks... 
    HttpWebResponse response = request.EndGetResponse(asynchronousResult) as HttpWebResponse; 
} 

在此先感谢!

+1

我发现当模拟器不能在网络上工作的时候。通常我通过尝试使用模拟器浏览器来确认它是模拟器问题。它通常会失败。如果您有实际的手机,请尝试通过该手段进行调试。另一个测试是看看如果你点击bing.com之类的东西,你会得到一个结果。 –

+0

模拟器的浏览器工作得很好,每次我尝试一下。另外,当去bing.com时,我的WebRequest很高兴地返回。 由于这是我为WP7开发的第一个应用程序,我还不是注册开发者,因此设备上的调试还不是一种选择。 我可能应该花99美元,而不是浪费更多的时间...... – bbohac

回答

0

正如我现在知道的,我的代码是绝对正确的,并且正在工作。正如Shawn Kendrot已经提到的那样,模拟器通信不起作用。 我设置了一个全新的Win7,安装了WP7.1 SDK(和7.1.1更新),它的工作方式和预期的一样。所以似乎有些东西阻塞了我的模拟器的呼叫。我不知道,那是什么,但我必须承认,我不在乎它现在正在工作。

谢谢Shawn指出,模拟器和网络有时会出现问题,这会将我踢向正确的方向。