2011-11-28 44 views
3

我使用這個代碼在我的Metro風格應用程序下載網頁中的例外:在WinRT中下載的網頁拋出

public static async Task<string> DownloadPageAsync(string url) 
    { 
     HttpClientHandler handler = new HttpClientHandler(); 
     handler.UseDefaultCredentials = true; 
     handler.AllowAutoRedirect = true; 
     HttpClient client = new HttpClient(handler); 
     HttpResponseMessage response = await client.GetAsync(url); 

     response.EnsureSuccessStatusCode(); 

     string responseBody = response.Content.ReadAsString(); 
     return responseBody; 
    } 

的問題是,當行client.GetAsync(url)運行時,它拋出一個異常,說:

An error occurred while sending the request.來自類型:HttpRequestException

編輯:

我已經使用了InnerException獲得更多的信息。拋出的第一個例外是SocketException與下面的消息:

An attempt was made to access a socket in a way forbidden by its access permissions

at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)

at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)

編輯2: 我已經下載並運行微軟的樣品,我也得到了同樣的錯誤: http://code.msdn.microsoft.com/windowsapps/HttpClient-Upload-Sample-f1abcc4e

The error is shown in the picture

編輯3: 我在另一臺機器上運行它,它工作正常。所以我猜這個代碼沒有問題。我複製瞭解決方案,這意味着解決方案也沒有問題。我正在嘗試重新安裝Windows Developer Preview以查看它是否修復了我的問題。

+0

您是否已驗證該網址是您真正打算成爲的網址?將URL粘貼到不同的用戶代理(瀏覽器等)中,以確保它真正地回覆您所期望的內容。 –

+0

我用'http:// www.google.com'來測試它。我確定這個網址是可以的。 –

+0

請看看編輯過的帖子。也許新的信息有幫助。 –

回答

4

好的。我找到了答案。例外是因爲我在Windows 8 Developer Preview上安裝了NetLimiter產品,並以某種方式阻止了我的應用程序訪問互聯網。

UPDATE: 首先,這是的每一次版本的Windows 8

public static async Task<string> DownloadPageAsync(string url) 
    { 
     try 
     { 
      HttpClientHandler handler = new HttpClientHandler { UseDefaultCredentials = true, AllowAutoRedirect = true }; 
      HttpClient client = new HttpClient(handler); 
      HttpResponseMessage response = await client.GetAsync(url); 
      response.EnsureSuccessStatusCode(); 
      string html = await response.Content.ReadAsStringAsync(); 
      return html; 
     } 
     catch (Exception) 
     { 
      return ""; 
     } 
    } 

其次的代碼,如果這也不行,有機會,你有一個網絡相關軟件阻止您的應用訪問互聯網。一個受歡迎的案例是代理商。如果你有代理安裝你的MetroStyle應用程序將無法訪問互聯網。要使它發揮作用,請參閱我的博客:

http://anoori.me/blog/general/use-proxifier-in-windows-8-without-fiddler2

+0

我感覺這是一個防火牆問題。 ;) –

+0

謝謝。我不得不重新安裝我的操作系統來調查這一點。你的回答讓我思考。 –

+0

@AlirezaNoori,我收到了一個例外:「無法在Windows 8 Metro App中創建SSL/TLS安全通道」任何想法? URL:http://stackoverflow.com/questions/14158069/the-request-was-aborted-could-not-create-ssl-tls-secure-channel-in-windows-8-me – Somnath

0

相當肯定netlimiter正在運行通過本地主機代理的網絡請求,您的應用程序沒有「本地網絡」的能力這將允許此類訪問本地網絡