Sto provando a chiamare un webservice. Devo usare un proxy che usa uno script WPAD. L'URL di questo script WPAD è diverso per le diverse distribuzioni dell'applicazione.Uso dinamico di un WebProxy con script WPAD
Sebbene IE abbia le corrette impostazioni di proxy, l'applicazione è in esecuzione come servizio di Windows in esecuzione in account Sistema locale, quindi l'applicazione non conosce le impostazioni IE per questo utente di Windows.
Mettere quanto segue in app.config funziona:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true" >
<proxy autoDetect="True" scriptLocation="http://url.to/wpad.dat"/>
</defaultProxy>
</system.net>
Ma questo ha la limitazione che non può essere configurato dall'utente. C'è un modo per fare dinamicamente quanto sopra dal codice (C# -)? Sospetto anche che quanto sopra cambierà il comportamento dei servizi web che non dovrebbero passare attraverso un proxy (ma non l'ho verificato).
A http://msdn.microsoft.com/en-us/library/system.net.webproxy.aspx ho trovato il testo utile: "(Per un esempio che dimostra utilizzando la funzione WPAD, vedere la documentazione per la classe IWebProxyScript.)" Ma non hanno trovato l'esempio :(
Ho trovato qualcosa di simile qui: [link] (http://www.pcreview.co.uk/forums/winhttpgetproxyforurl-t1862181.html) ma i WPAD possono restituire diversi server proxy (failover e/o bilanciamento del carico, vedere [ link] (http://en.wikipedia.org/wiki/Proxy_auto-config)). Quindi li restituisce separati da punto e virgola. Le voci che ritornano "DIRECT" sembrano scomparire con questo metodo. Quindi anche se questo è un passo nella giusta direzione, non mi sembra completo. –
Non potresti usare string.split sul valore di ritorno per ottenere un elenco di voci e poi provarle in sequenza, in modo predefinito di non utilizzare un proxy se l'elenco è vuoto? – sga101
Questo è quello che ho finito per fare. Ma non mi piace: - Ora ho un ciclo che esegue la richiesta web per ogni proxy che trovo - Non so come gestire DIRECT. Ora non utilizzo alcun proxy se ottengo una lista vuota, ma ho visto esempi che restituiscono sia un proxy che DIRECT, quindi probabilmente non è il modo corretto di farlo. - Se il webrequest sta scadendo, non so davvero perché. Potrebbe essere il proxy, potrebbe essere qualcos'altro. Quindi ripeto la richiesta con un altro proxy. Forse un altro timeout? E l'utente aspetta ... - Davvero non voglio farlo. Voglio che il sistema operativo lo gestisca ... –