2012-05-02 42 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指出,模擬器和網絡有時會出現問題,這會將我踢向正確的方向。