5

Ich versuche, eine Zeichenfolge von jeder Webseite in meiner tragbaren Klassenbibliothek herunterladen. Ich habe die meisten grundlegenden Setup erstellt:Download Zeichenfolge von URL mit einer tragbaren Klassenbibliothek (PCL)

  • ein neues PCL-Projekt erstellt
    • kompatibel mit WP8 und WinRT sowie den obligatorischen Komponenten wie Silverlight

Als WebClient ist über diese Systeme hinweg nicht kompatibel, es ist nicht möglich zu verwenden:

string data = new WebClient().DownloadString(); 

Ich habe mit diesem als auch versucht (verwendet this):

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.Method = HttpMethod.Get; 
HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync(); 

string data = "" 
using (var sr = new StreamReader(response.GetResponseStream())) 
{ 
    data = sr.ReadToEnd(); 
} 

Allerdings, wenn ich den zweiten Satz von Code von einer externen C# Anwendung Referenzierung der PCL nenne, schlägt der Debugger einfach ohne Warnung oder Fehler Nachricht an:

request.GetResponseAsync(); 

Gibt es eine einfache Möglichkeit, eine Zeichenfolge, die ich vermisse, herunterzuladen?

* auch, warum würde der Debugger einfach ohne Erklärung verlassen?

Edit:

Hier ist eine andere Methode, die ich versucht habe - basierend auf einer Antwort bereits zur Verfügung gestellt. Auch diese Methode beendet einfach und erzwingt das Schließen des Debuggers.

PCL Methode:

public static async Task<string> DownloadString() 
{ 
    var url = "http://google.com"; 
    var client = new HttpClient(); 
    var data = await client.GetStringAsync(url); 

    return data; 
} 

Wählverfahren:

private static async void Method() 
{ 
    string data = await PCLProject.Class1.DownloadString(); 
    return data; 
} 
+0

Sind Sie mit dieser in eine Desktop App, Windows Store App, WP8 App oder was, wenn Sie dieses Verhalten sehen? Sind Sie sicher, dass Sie auf alle Aufgaben warten oder warten? (Andernfalls wird das Programm möglicherweise vollständig ausgeführt und beendet, bevor der Download abgeschlossen ist.) Wenn Sie Windows Phone verwenden, tun Sie etwas, das den UI-Thread nach Abschluss des Downloads blockiert (z. B. über Task.Wait oder Task. Ergebnis)? –

Antwort

21

die NuGet Pakete Install:

  • Microsoft.Bcl.Async, die async/await Unterstützung PCLs hinzufügt.
  • Microsoft.Net.Http, die HttpClient Unterstützung für PCLs hinzufügt.

Dann können Sie es die einfache Weise tun:

var client = new HttpClient(); 
var data = await client.GetStringAsync(url); 
+0

Ich habe immer noch das gleiche Problem. Auch nachdem ich zwei neue, separate Projekte erstellt habe - die Methode schlägt einfach ohne Warnung oder Ausnahme fehl.Ich werde meinen ursprünglichen Beitrag bearbeiten, um diesen Versuch einzuschließen. – user1567095

+0

Stellen Sie sicher, dass Ihre Firewall Ihre App durchlässt. Stellen Sie außerdem sicher, dass Sie ein DNS treffen. –

+0

Warum sollte meine Firewall stören? – user1567095

1

Diese Methode ist für mich gearbeitet, es den HTML-Quellcode von google.com zurückgegeben:

public async void GetStringFromWebpage() 
{ 
    using (HttpClient wc = new HttpClient()) 
    { 
     var data = await wc.GetStringAsync("http://google.com/"); 
     Debug.WriteLine("string:" + data); 
    } 
}