2013-06-06 11 views
9

Bir WinForms uygulamasından bir web servisi arıyorum. Bir proxy sunucusu kullanılmadığında her şey iyi çalışır, ancak bir proxy kullanıldığında uygulama SOAP isteği için beklediği XML yanıtı yerine çöker, "Kimlik Doğrulama Gerekiyor" ifadesini içeren bir HTML hata sayfası alır. Hata oluşturulan olarak,Varsayılan proxy sunucusunu otomatik olarak kullanmak için WebClient'i (webservice istemcisi) nasıl alabilirim?

WebClient client = new WebClient(); 
WebProxy wp = new WebProxy("proxy server url here"); 
client.Proxy = wp; 

... ama bir ölçüde, yukarıdaki yapıyor OLMADAN zaten proxy sunucusu görmeye gibi görünüyor:

O böyle manuel proxy ayarlayabilirsiniz görünüyor aslında proxy sunucusundan geliyor. Sadece kullanıcının bilgisayarındaki Windows Kimlik Doğrulama giriş bilgilerini almıyor gibi görünüyor. Bunu yapmak için nasıl zorlayabilirim?

Kendi makinemde bunu Fiddler'ı kullanarak (ve "Proxy Kimlik Doğrulaması Gereksin" seçeneğini etkinleştirerek) simüle edersem, giriş kimlik bilgilerini sormak için bir iletişim kutusu açılır, ancak bu istemcinin makinelerinde olmaz. (gerçek bir donanım proxy'si kullanan - McAfee Web Gateway).

Bunu nasıl halledebilirim? Kullanıcıların sunucuyu el ile yapılandırması için bir iletişim kutusu sağlamalı mıyım, yoksa Windows varsayılan proxy'sini ve kullanıcının kendi oturum açma bilgilerini kullanması için WebClient'e söyleyecek bir ayar var mı? Eğer aşağıdaki kodu kullanarak proxy sunucusu alabilirsiniz, ama bu kimlik doğrulama iletişim tüm durumlarda görünmesine neden olmaz gibi Güncelleme

(diğerlerinde bazı bilgisayarlarda çalışır ancak) görünüyor: yukarıdaki kod doğruysa bazı kullanıcıların kimlik bilgileri istenebilir olmaz neden

IWebProxy defaultProxy = WebRequest.DefaultWebProxy; 
if (defaultProxy != null) 
{ 
    defaultProxy.Credentials = CredentialCache.DefaultCredentials; 
    client.Proxy = defaultProxy; 
} 

, ben anlamıyorum. Kullanıcı kimlik bilgilerini toplamak ve bunları WebRequest nesnesine sağlamak için kendi koduma koymam gerekir mi?

+0

Baktığınız mı çalışmalı [WindowsIdentity.Impersonate Yöntem] (http://msdn.microsoft.com/en-us/library/w070t6ka%28v=vs.100%29.aspx) ? –

+1

Uygulamamın zaten düşündüğüm yerel kullanıcı olarak çalıştığından emin değil misiniz? – NickG

+0

Doh, kötüyüm ... Son zamanlarda SQL CLRSprocs ile uğraşıyorum ... "Hepiniz [kullanım] bir çekiç ..." –

cevap

0

İlk deneyin bu kullanmak:

WebProxy proxy = (WebProxy) WebRequest.DefaultWebProxy; 
if (proxy.Address.AbsoluteUri != string.Empty) 
{ 
    Console.WriteLine("Proxy URL: " + proxy.Address.AbsoluteUri); 
    client.Proxy = proxy; 
} 

bu işe yaramazsa deneyin:

WebProxy proxy = WebProxy.GetDefaultProxy() 
client.Proxy = proxy; 
+1

WebPRoxy.GetDefaultProxy kullanımdan kaldırıldı. –

16

deneyin sizin app.config dosyasına

<system.net> 
    <defaultProxy useDefaultCredentials="true" /> 
    </system.net> 

ekleyerek

+0

Mükemmel, bu cevabı Google'da bulmak çok zordu .... – GONeale

+0

Benim için çalışmıyor. Web.config dosyasında – NickG

+1

da yardımcı oluyor. – Stanislav

3
using (WebClient webClient = new WebClient()) 
{ 

    webClient.UseDefaultCredentials = true; 
    webClient.Proxy = WebRequest.GetSystemWebProxy(); 
} 

bu

+0

benim için çalışmıyor mu , hala olsun "407 Proxy kimlik doğrulaması Zorunlu" yerleştirilmelidir –

+0

https://stackoverflow.com/questions/299940/how-should-i-set-the-default- gör Proxy kullanımlı-default-kimlik –

İlgili konular