Me parece que la mayor parte de lo que se puede lograr HttpWebRequest/Response
también se puede lograr con la WebClient
clase. Leí en alguna parte que WebClient
es un contenedor de alto nivel para WebRequest/Response
.
Hasta ahora, no puedo ver nada que se pueda lograr con HttpWebRequest/Response
eso que no se puede lograr WebClient
, ni donde HttpWebRequest / Response le dará más control "de grano fino".
¿Cuándo debo usar WebClient y cuándo HttpWebRequest/Response
? (Obviamente, HttpWebRequest/Response
son específicos de HTTP).
Si HttpWebRequest/Response
son de nivel inferior WebClient
, ¿qué puedo lograr con lo HttpWebRequest/Response
que no puedo lograr WebClient
?
base.GetWebRequest
para crearla y luego personalizar exactamente lo que deseaHttpWebRequest
expone muchas más cosas que le permiten un control de protocolo de grano fino, por ejemplo: si desea usar Keep-Alive, qué grupo de conexiones usar, si almacenar o no las escrituras en el búfer, etc.WebClient
no expone todos esos (aunque puede subclasificarWebClient
y acceder geta al objeto Request subyacente).WebClient
es útil para aquellas situaciones en las que simplemente quiere hacer una operación (por ejemplo: de POST / GET / formulario de carga) y no puede ser molestado en crear y gestionar laHttpWebRequest
,RequestStream
,HttpWebResponse
, y la secuencia de respuesta.fuente
Del blog de Tim Heuer: http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx
En cambio, en Silverlight querrás usar WebClient o HttpWebRequest. ¿Cual es la diferencia? Aquí está la versión de Timheuer. WebClient es una implementación más simple que realiza solicitudes GET con mucha facilidad y obtiene un flujo de respuesta. HttpWebRequest es ideal para cuando necesita un control un poco más granular sobre la solicitud, necesita enviar encabezados u otras personalizaciones.
fuente
La clase WebClient se ejecuta en el hilo de la interfaz de usuario, por lo que la interfaz de usuario no responde mientras se descargan datos de Internet. Por otro lado, la clase HttpWebRequest no bloquea el hilo de la interfaz de usuario y su aplicación responde. Por lo tanto, en aplicaciones donde se va a descargar una gran cantidad de datos de Internet o si el origen de los datos es de acceso lento, debe usar la clase HttpWebRequest; en todos los demás casos, debe usar la clase WebClient.
fuente
Otra desventaja de
WebClient
es que ignora el HTTPContentType
'scharset
valor cuando lo utiliza para obtener el texto de respuesta. Debe establecer explícitamente la codificación a través de laEncoding
propiedad.fuente
Encoding
: no puede conocer la codificación hasta después de la solicitud, por lo que la API de WebClient hace que sea muy poco probable que pueda descargar correctamente una cadena en una codificación desconocida.Una cosa más que HttpWebrquest le permite la compresión, pero la clase Net.WebClient no admite la compresión HTTP
fuente
GetWebRequest
. En este caso, simplemente modifica laHttpWebRequest.AutomaticDecompressiong
propiedad subyacente ).El "HtttpWebRequest" está obsoleto en .NET 4.5. Ahora, esta clase es solo interna.
fuente
WebRequest
lugar.Un ejemplo: publicar datos y recuperar datos procesados en un ciclo de solicitud / respuesta parece imposible con WebClient, pero puede hacerlo con HtttpWebRequest.
fuente