2012-02-28 10 views
16

Quiero usar un servicio web HTTP, y ya he desarrollado una aplicación para wp7.La clase WebClient no existe en Windows 8

Uso la clase WebClient, pero no puedo usarla para Windows 8 ("error: tipo o espacio de nombre no se puede encontrar").

¿Qué más puedo usar?

¿Me puede dar una muestra del código?

¿Tiene Microsoft un sitio para ayudar cuando no existe un espacio de nombres?

+7

Por "windows8", ¿realmente quieres decir "WinRT"? Debería funcionar absolutamente bien en Windows 8 con el marco .NET regular. Si se dirige a WinRT, entonces seguro: necesita usar lo que WinRT ofrece. –

+2

1. No es un espacio de nombres, es una clase. 2. Sí, está ausente de WinRT ya que fomenta una mala práctica de hacer llamadas sincrónicas. Use la clase HttpWebRequest en su lugar. – wizzard0

+4

"Sí, está ausente de WinRT ya que fomenta una mala práctica de hacer llamadas sincrónicas". Esta ciertamente NO es la razón por la cual WebClient no existe en WinRT porque WebClient tiene versiones Async de la mayoría de sus métodos. La razón por la que falta en WinRT es probable debido a otras razones. –

Respuesta

26

Opción 1: HttpClient si no necesita una notificación de progreso determinista, esto es lo que quiere usar. Ejemplo.

public async Task<string> MakeWebRequest() 
{ 
     HttpClient http = new System.Net.Http.HttpClient(); 
     HttpResponseMessage response = await http.GetAsync("http://www.example.com"); 
     return await response.Content.ReadAsStringAsync(); 
} 

Opción 2: Cuando necesite notificaciones de progreso puede utilizar DownloadOperation o BackgroundDownloader. Este sample en MSDN es un buen comienzo.

Opción 3: Como mencionó el servicio web y devuelve XML, puede usar XmlDocument.LoadFromUriAsync, que le devolverá un documento XML. Ejemplo

public async void DownloadXMLDocument() 
{ 
     Uri uri = new Uri("http://example.com/sample.xml"); 
     XmlDocument xmlDocument = await XmlDocument.LoadFromUriAsync(uri); 
     //do something with the xmlDocument. 
} 

Cuando está desarrollando para metro .Net Framework será limitado en comparación con la versión de escritorio. Si ve un error en el espacio de nombre no encontrado, generalmente se debe a este hecho. Este link en MSDN tiene la lista de espacios de nombres, clases disponibles para el metro.