Uygulamamıza HTTP istekleri yapmak için HTTPWebRequest
nesnelerini kullanıyoruz ve istek kimlik doğrulaması gerektirdiğinde bir sorun yaşıyoruz ve şeffaf bir proxy var (Squid 3.1.10).HTTPWebRequest.GetResponse(), kimliği doğrulanmış bir proxy aracılığıyla kimliği doğrulanmış isteklerde başarısız oluyor
string url = "http://www.icode.co.uk/test/auth.php";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = new NetworkCredential("username", "password");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
MessageBox.Show(reader.ReadToEnd());
reader.Close();
stream.Close();
response.Close();
Orijinal kodumuzda aynı sorunla karşılaşan WebClient sınıfı kullanılmıştır.
Bu kod ilk çalıştırdığında, doğru sonucu görüntüler. Kod ikinci kez çalıştırıldığında , onunla GetResponse()
satırda başarısız: Windows 7'de
System.Net.WebException was unhandled
Message="The server committed a protocol violation. Section=ResponseStatusLine"
Source="System"
StackTrace:
at System.Net.HttpWebRequest.GetResponse()
at Dummy.DummyForm.button1_Click(Object sender, EventArgs e) in H:\Trial\Dummy\DummyForm.cs:line 42
at ...
, süreci yeniden başlatmayı o kurtarmak ve bir kez çalışmaya neden olur, ancak Server 2003 tam yeniden başlatma gerektirir.
network capture baktığımızda, iki istekleri başlangıç doğrulanmamış istek gönderilir ve Content-Length
görmezden geliyor sanki sunucu yanıt, ancak başarısız istekleri ilk cevapta ortasında 2 doğrulanmış isteği gönderir edilir başlamak aynıdır başlık (hangisi doğrudur). Daha sonra ilk yanıtın geri kalanını alır ve protokol hatasıyla başarısız olur.
HTTPWebRequest
) temiz olsa bağlantıyı kapatmak etmediğini garip görünüyor.
beklendiği gibi vekil kullanımı (sigara noktası 80 veya dahili trafik) istekleri bütün iş değildir. Kimlik doğrulama olmadığında, yalnızca tek isteği yaptığından çalışır.
Zaten minimuma sorun kodunu azaltılmış ve MSDN numunesi ile çoğaltılabilir, ama herkes bu bilinen bir sorun veya (NET veya Squid) yapılandırmasında bir sorun olup olmadığını bilen var mı ettik?
sorunun yattığı yer bu olup olmadığından emin, ama ne zaman yapılır sizin StreamReader kapatmak için emin yapıyoruz değil mi? –
Ekran görüntüsünü eklediğiniz için teşekkür ederiz. Yetkilendirme bilgisini ilk GET'den çıkardınız mı yoksa hiç içermediniz mi? –
Uygulamamın geçerli olmadığı anlaşıldığından cevabımı kaldırdım. –