WebClient vs. HttpWebRequest / HttpWebResponse

Me parece que la mayoría de lo que se puede lograr con HttpWebRequest/Response también se puede lograr con la clase WebClient . 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 que no se puede lograr con WebClient , ni donde HttpWebRequest / Response le otorgará un control más “detallado”.

¿Cuándo debería usar WebClient y cuándo HttpWebRequest/Response ? (Obviamente, HttpWebRequest/Response son específicos de HTTP).

Si HttpWebRequest/Response tiene un nivel más bajo que WebClient , ¿qué puedo lograr con HttpWebRequest/Response que no puedo lograr con WebClient ?

El uso de HttpWebRequest le brinda más control sobre la solicitud. Puede configurar cookies, encabezados, protocolo, etc. En la respuesta, también puede recuperar las cookies y los encabezados

HttpWebRequest expone muchas más cosas que le permiten un control detallado del protocolo, por ejemplo: si desea usar Keep-Alive, qué grupo de conexiones usar, si debe almacenar o no las escrituras, etc.

WebClient no expone todos esos (aunque puede subclasificar desde WebClient y getaccess al objeto Request subyacente).

WebClient es útil para aquellas situaciones en las que solo desea realizar una operación (por ejemplo, carga POST / GET / Formularios) y no se puede molestar en crear y administrar las HttpWebRequest , RequestStream , HttpWebResponse y HttpWebResponse .

Desde el blog de Tim Heuer – http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx

En cambio, en Silverlight querrá usar WebClient o HttpWebRequest. ¿Cual es la diferencia? Aquí está la versión de Timheuer. WebClient es una implementación más simple que hace solicitudes GET realmente fácil y obtiene un flujo de respuesta. HttpWebRequest es ideal para cuando necesita un control un poco más granular de la solicitud, necesita enviar encabezados u otras personalizaciones.

La clase WebClient se ejecuta en el subproceso de la interfaz de usuario, por lo que la interfaz de usuario no responde mientras se descargan los datos de Internet. Por otro lado, la clase HttpWebRequest no bloquea el subproceso de la interfaz de usuario y tu aplicación responde. Por lo tanto, en las aplicaciones donde se debe 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.

La “HtttpWebRequest” está obsoleta en .NET 4.5. Ahora, esta clase es solo interna.

Una cosa más HttpWebrquest le permite la compresión, pero la clase Net.WebClient no admite la compresión HTTP

Otra desventaja de WebClient es que ignora el valor del charset del HTTP ContentType cuando lo usa para obtener el texto de respuesta. Debe establecer explícitamente la encoding a través de la propiedad Encoding .

Un ejemplo: Publicar datos y recuperar datos procesados ​​en un ciclo de solicitud / respuesta parece ser imposible con WebClient, pero puede hacerlo con HtttpWebRequest.