PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : .Net WebClient vs. HttpClient


Elemental
2013-09-28, 16:31:19
Hallo,
unter .NET 4 konnte ich mittels der WebClient-Klasse meinen Satelliten-Receiver über die html-API fernsteuern, z.B.

System.Net.WebClient myClient = new System.Net.WebClient();
System.IO.Stream response = myClient.OpenRead("http://192.168.178.102/query?sendrc&rcmute");
response.Close();


Leider gibt es unter .NET 4.5 die WebClient-Klasse nicht mehr. Wie macht man so etwas mit der neuen HttpClient-Klasse?
Ich hab ein Beispiel von Microsoft kopiert:

try
{
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("http://192.168.178.102/query?sendrc&rcmute");
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
}
catch (HttpRequestException e)
{
System.Diagnostics.Debug.WriteLine("\nException Caught!");
System.Diagnostics.Debug.WriteLine("Message :{0} ", e.Message);
}


Beim Aufruf von GetAsync() kommt aber immer eine HttpRequestException :eek: Wenn ich "http://192.168.178.102/query?sendrc&rcmute" allerdings durch eine normale Webseite ersetzet, z.B. "http://www.google.de", dann funktioniert der Aufruf.

Weiss jemand, woran das liegen kann?

mfG
Elemental

edit:
Hmm, die innerException ist eine SocketException:
"Der Zugriff auf einen Socket war aufgrund der Zugriffsrechte des Sockets unzulässig 192.168.178.102:80"

PatkIllA
2013-09-28, 16:48:43
Leider gibt es unter .NET 4.5 die WebClient-Klasse nicht mehr.Sicher gibt es die noch.

Elemental
2013-09-28, 16:56:05
OK, ich bin in einer Windows 8 App und tippe im VS2012 System.Net.Webclient, dann steht da:
"The type or namespace name 'WebClient' does not exist in the namespace 'System.Net' (are you missing an assembly reference?)"

edit:
Ok, gibt die Klasse wohl nur bei Windows 8 Apps nicht...

Elemental
2013-09-28, 17:05:29
OK, hab die Ursache meines Problems gefunden.
Bei einer Windows 8 App muss man erstmal im Manifest einstellen, dass sie auf das private Netzwerk Zugriff haben muss...

Monger
2013-09-28, 18:02:16
Dann ist halt die Assembly und/oder der Namespace nicht importiert.

Aber der Webclient ist wohl aus gutem Grund im Standardframework von WinRT nicht mit drin. Ist wohl relativ schwerfällig.

Hab n bissl rumgelesen, und allgemein wird wohl die Klasse als Alternative empfohlen:

http://msdn.microsoft.com/de-de/library/System.Net.HttpWebRequest.aspx

Elemental
2013-09-28, 21:18:31
Für Apps hat man ja auch nicht das volle .NET 4.5 Framework, sondern ".NET Framework for Windows Store Apps".
Das ist afaik nur ein Subset von .NET 4.5

Hab auch schon etwas rumgelesen. "HttpClient" soll wohl besser sein als "WebClient", ""HttpWebRequest" ist etwas mehr low-level.