C# WP7AppDev Problem:[WebClient.DownloadString(URI)]

bLu3to0th

Commodore
Registriert
Juli 2010
Beiträge
4.473
WP7 AppDev Problem

Ich versuche diese Funktion zu nutzen: "WebClient.DownloadString(URI);" (MSDN)

und bekomme folgende Fehlermeldung:
"System.Net.Webclient" enthält keine Definition für "Downloadstring"

Klasse ist eingebunden(using System.Net; )

Wat kann ich nun noch machen? Scheinbar scheint das in der Klasse ja zu fehlen...

Ich muss irgendwie den Quelltext von ner Webseite kriegen, finde aber keine brauchbare Funktion dafür ::(
 
Zuletzt bearbeitet:
bLu3to0th schrieb:
und bekomme folgende Fehlermeldung:
"System.Net.Webclient" enthält keine Definition für "Downloadstring"

Liegt wahrscheinlich daran, dass die Methode auch DownloadString heißt ;)
 
Leider nicht, das war nur hier falsch geschrieben.. ich hab in der Auswahl auch schon geguckt... das gibts einfach nicht, müsste aber eigentlich in der Klasse enthalten sein -.-

gibt nur .Equals und .ReferenceEquals
 
Welches .Net-Framework hast du angegeben? zB beim .Net Compact Framework 3.5 ist die Funktion nicht dabei. Falls du Silverlight-Anwendungen programmierst, gibt es dort die Funktion afaik auch nicht.


Edit:
Statt mit DownloadString zu arbeiten gibt, es auch andere Möglichkeiten. zB so:
Code:
string result = null;
HttpWebResponse response = null;

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.google.de");
response = (HttpWebResponse)request.GetResponse();
Encoding responseEncoding = Encoding.GetEncoding(response.CharacterSet);

using (StreamReader sr = new StreamReader(response.GetResponseStream(), responseEncoding))
{
    result = sr.ReadToEnd();
}
In result findest du dann die Webseite als String.

Im Anhang findest du ein kleines Demo-Projekt dazu.
 

Anhänge

Zuletzt bearbeitet:
Sorry, seh grade du hast ja extra WP7 in den Titel geschrieben.
DownloadString gibt es nur im Desktop-Framework. Für Silverlight musst du DownloadStringAsync benutzen.

Erklärt allerdings nicht, wieso du nur Equals und ReferenceEquals angeboten bekommst. Klingt als würdest du mit dem falschen Typen arbeiten. Vermutlich ein Fehler im Code.
 
Also Async hatte ich schonmal irgendwo angeboten bekommen, aber frag mich jetzt nicht wo o.O

bei eLaurins Code werde ich überrannt von Fehlern^^
  • Fehler 1 "System.Net.HttpWebRequest" enthält keine Definition für "GetResponse", und es konnte keine Erweiterungsmethode "GetResponse" gefunden werden, die ein erstes Argument vom Typ "System.Net.HttpWebRequest" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)
  • Fehler 2 Der Typ- oder Namespacename "Encoding" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)
  • Fehler 3 Der Name "Encoding" ist im aktuellen Kontext nicht vorhanden.
  • Fehler 4 "System.Net.HttpWebResponse" enthält keine Definition für "CharacterSet", und es konnte keine Erweiterungsmethode "CharacterSet" gefunden werden, die ein erstes Argument vom Typ "System.Net.HttpWebResponse" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)
 
Ich Dummkopf habe auch nicht richtig gelesen.

Bei WP7 habe ich auf diese Art Daten aus dem Netz geladen:
Code:
private void SomeMethod()
{
    WebClient web = new WebClient();           
    // Event-Handler definieren...
    web.OpenReadCompleted += new OpenReadCompletedEventHandler(web_OpenReadCompleted);
    // ...und daran einen Download anhängen.
    web.OpenReadAsync(new Uri("http://www.google.de"));            
}

// Der Event-Handler, der aufgerufen wird, wenn der Download fertig ist.
void web_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    string response;
    using (var reader = new StreamReader(e.Result, Encoding.GetEncoding("iso-8859-1")))
    {
        response = reader.ReadToEnd();
    }

    // In response ist das Ergebnis.
}

Bei WP7 muss es async laufen, damit die App weiterhin flüssig bedienbar ist. Nichts ist schlimmer als eine App, die beim Download hängt.
 
Ok jetzt isses fast fehlerfrei:
Fehler 1 Der Name "Encoding" ist im aktuellen Kontext nicht vorhanden.

Ich bin mitn Programmieren ziemlich eingerostet.. das letzte ma vor nem Jahr PHP.. C# noch nie...

wie muss ich das Teil denn in nem anderen privat aufrufen?

mit somemethod(URL) ?
und dann entsprechend url definieren!??
 
Mach einen Rechtsklick auf "Encoding", dann "Auflösen" und dort "using blabla" anklicken. Ihm fehlt da nur der Verweis, wo er Encoding herbekommt.

Ich empfehle dir, zB bei Galileo Computing, ein Buch über C# zu besorgen. Wie man Methoden aufruft, ist doch eigentlich Basiswissen. ;)
Eine Quelle zum Nachschlagen ist sehr wichtig, gerade bei WP7 gibt es viele Konzepte, die auf den ersten Blick sehr verwirrend allerdings auch extrem wichtig sind (zB DataBinding).
 
Wie gesagt, zum direkten downloaden gibts sogar DownloadAsync. Dann brauchste noch nicht mal nen Streamreader.

Code:
private void downloadSomething()
        {
            WebClient w = new WebClient();
            w.DownloadStringCompleted += new DownloadStringCompletedEventHandler(w_DownloadStringCompleted);
            w.DownloadStringAsync(new Uri("http://www.irgendwas.de/"));
        }

        void w_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            string ergebnis = e.Result;
        }

Ansonsten gibts hier http://create.msdn.com/en-us/education/quickstarts gute Anleitungen und auch code Samples: http://msdn.microsoft.com/en-us/library/ff431744(v=vs.92).aspx
 
Zuletzt bearbeitet:
Bei mir war es so, dass er das Encoding nicht richtig beachtet hat. Deshalb musste ich den StreamReader nehmen, da man dort das Encoding einstellen kann.
 
und so hast nicht funktioniert? Misteriös :P

WebClient w = new WebClient();
w.Encoding = Encoding.GetEncoding("iso-8859-1");

....
 
Nein, so hat es nicht funktioniert. Frag mich nicht warum, aber erst das Encoding beim StreamReader hat das gewünschte Ergebnis gebracht (= Sonderzeichen wurden richtig angezeigt).

Ich weiß es nicht mehr genau, aber ich könnte mir vorstellen, dass der Webadmin in der Datei UTF-8 angegeben hat, die Datei aber in ISO gespeichert hat. Oder umgekehrt. Da kommt auch das .Net Framework mal durcheinander.
 
BlooDFreeZe schrieb:
und so hast nicht funktioniert? Misteriös :P
Ja genau! Ich bin hier schon voll am Verzweifeln, weil jedes mal wenn ich denke, dass ich den passenden Codeschnipsel gefunden habe, direkt mit einer enttäuschenden Meldung begrüßt werde, dass es aus irgendeinem Grund dann doch nicht funktiert - das ist echt zum brechen!

Kann ich mal zu meinem Nachbarthread verweisen!?
 
Naja Schnipsel die für WP7 sind sollten dann auch funktionieren :P Brauchst du denn das Encoding bzw. wirds bei dir denn falsch encoded? Wenn nicht kannstes ja einfach weglassen. Wobei es halt laut Dokumentation genau das tun sollte was man will -.- Naja der code von e-laurin funzt ja :)
Das mit den Netzwerkt Klassen für Wp7 ist sowieso so eine Sache. Es wurden halt sicherheitshalber nur vereinzelte, abgespeckte Klassen zur Verfügung gestellt. Da muss man dann immer ausloten welche Klasse denn jetzt wirklich alles unterstützt was man braucht.
 
Keine Ahnung ob ichs Encoding nun schlussendlich brauche... jedenfalls läuft es damit, also will ich das jetzt auch nicht mehr anpacken xD
Habs im mom so, dass ich aus dem HTML-Quelltext der DHL-Sendungsverfolgung nen ellenlangen Einzeiler gemacht habe und aus dem will ich mir nun die passenden Informationsfetzen rausbrechen. Dafür wiederum brauche ich einen explodebefehl(also split), nur für den muss ich bei so einem Quellstring mehr als nur ein Zeichen zur "Sollbruchstellfindung" nutzen.
 
Sorry wenn ich den Thread ausgrabe aber ich habe ein mir unverständliches Problem.
Ich nutze das Schnipsel von e-laurin für eine Windows 8 App wobei mir folgender Fehler angezeigt wird:
Code:
Der Typ- oder Namespacename 'OpenReadCompletedEventArgs' konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)

Wüsste nicht was hier fehlen soll. Kann mich bitte wer aufklären?
 
Johnny B schrieb:
Sorry wenn ich den Thread ausgrabe aber ich habe ein mir unverständliches Problem.
Ich nutze das Schnipsel von e-laurin für eine Windows 8 App wobei mir folgender Fehler angezeigt wird:
Code:
Der Typ- oder Namespacename 'OpenReadCompletedEventArgs' konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)

Wüsste nicht was hier fehlen soll. Kann mich bitte wer aufklären?

Naja, der Fehler ist schon ziemlich offensichtlich, oder?
Nebenbei ist WP7 nicht Windows 8 ;)

Code:
private async Task<string> GetContentString( Uri uri )
{
    using ( HttpClient client = new HttpClient() )
    {
        HttpResponseMessage response = await client.GetAsync( uri );
        return await response.Content.ReadAsStringAsync();
    }
}
 
Zurück
Oben