2012-09-27 15 views
7

Mi pregunta proviene de un problema que descubrí en una red corporativa. Estoy desarrollando con Windows 8, en mi caso, IE10 está configurado para detectar automáticamente la configuración del proxy.¿Cómo puedo obtener un nuevo objeto WebProxy predeterminado en una aplicación C# Windows Store?

En mi aplicación C# utilizo System.Net.Http.HttpClient. Descubrí que el objeto IWebProxy predeterminado para todo el proceso queda inutilizable si me desconecto, realizo una solicitud fallida y luego vuelvo a estar en línea. Es importante hacer una solicitud que falla, de lo contrario no hay problema. Aquí hay un ejemplo de cómo puedo manejar este frágil proxy.

var defaultHandler = new HttpClientHandler(); 
var fragileProxy = defaultHandler.Proxy; 
var httpClient = new HttpClient(defaultHandler); 

Después de algunos experimentos, descubrí que podía conseguir un proxy de trabajo llamando System.Net.WebProxy.GetDefaultProxy();

Luego implementé un NetworkChangAwareProxy: IWebProxy. Así es, un proxy para mi IWebProxy. Internamente solo funciona y obtiene un nuevo WebProxy.GetDefaultProxy() cada vez que NetworkChange.NetworkAddressChanged.

Lo conecto cuando la aplicación se inicia y el problema desaparece.

WebRequest.DefaultWebProxy = new NetworkChangeAwareProxy(); 

Esperemos que alguien me diga que hay una mejor manera de resolver este problema. Sin embargo, mi pregunta específica es acerca de las aplicaciones de estilo de la tienda de aplicaciones. (aplicaciones de metro)

System.Net.WebProxy.GetDefaultProxy() no está disponible y System.Net.HttpWebRequest.DefaultWebProxy simplemente devuelve el mismo proxy difunto después de estar fuera de línea y regresar.

¿Cómo puedo obtener un control para un nuevo objeto IWebProxy en una aplicación C# Windows Store?

+0

¿Está reutilizar el mismo objeto WebRequest? –

Respuesta

0

Puede usar la solicitud Web para obtener el proxy:

var req = WebRequest.Create(@"api/stat/stats/"); 
req.Proxy = WebRequest.GetSystemWebProxy(); 
req.Timeout = 10000; 
req.Method = "GET"; 
Cuestiones relacionadas