a specific issue with my ASP.NET application hata ayıklamaya çalışıyorum.HttpWebRequest'i sunucudan çıkarmadan yeniden kullanabilir miyim?
void uploadFile(string serverUrl, string filePath)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.
Create(serverUrl);
CredentialCache cache = new CredentialCache();
cache.Add(new Uri(serverUrl), "Basic", new NetworkCredential("User", "pass"));
request.Credentials = cache;
request.Method = "POST";
request.ContentType = "application/octet-stream";
request.Timeout = 60000;
request.KeepAlive = true;
using(BinaryReader reader = new BinaryReader(
File.OpenRead(filePath))) {
request.ContentLength = reader.BaseStream.Length;
using(Stream stream = request.GetRequestStream()) {
byte[] buffer = new byte[1024];
while(true) {
int bytesRead = reader.Read(buffer, 0, buffer.Length);
if(bytesRead == 0) {
break;
}
stream.Write(buffer, 0, bytesRead);
}
}
}
HttpWebResponse result = (HttpWebResponse)request.GetResponse();
//handle result - not relevant
}
ve Write()
ile bir istisna atar: istemci aşağıdaki kodu çalıştırır "taşıma bağlantısına veri yazılamıyor. Kurulan bir bağlantı, ana makinenizdeki yazılım tarafından iptal edildi" Metin. System.Net tracing'u kullandım ve Content-Length
setini kullanarak isteği gönderdiğimde bir şeyin ters gittiğini fark ettim. Ben sunucuya Yukarıdaki kodda using
deyimi içinde olan her şeyi atlarsanız
Özellikle derhal WWW-Authenticate
ile yanıtlar ve daha sonra müşteri WWW-Authenticate
ile isteği reposts ve her şey yüklemedi dosyanın haricinde gayet gider ve istek çok daha sonra başarısız olur.
Aşağıdakileri yapmak istiyorum: veri olmadan bir istek gönderin, WWW-Authenticate
bekleyin ve ardından WWW-Authenticate
ve verileriyle tekrarlayın. Bu yüzden yukarıdaki kodu değiştirmeyi denedim: önce tüm parametreleri ayarlayın, ardından GetResponse()
'u arayın, sonra gönderin, ancak ContentLength
özelliğini ayarlamaya çalıştığımda "Bu özellik, yazma başladıktan sonra ayarlanamaz" şeklinde bir istisna atılır.
HttpWebRequest
Yeniden kullanılamaz gibi görünüyor.
Bağlantıyı kapatmadan isteği yeniden göndermek için bunu nasıl kullanırım?
Aynı problemim var. Eğer çözümü aldıysanız, lütfen bana yardımcı olacak değiştirilmiş yeni kodu sağlayın veya gösterin. – Herin
@Herin: Kimlik doğrulamasını nonce ile kullanırsanız çözüm yok. Temel kimlik doğrulama gibi bir şey kullanırsanız, "Yetkilendirme" başlıklarını yalnızca "WWW-Authenticate" aşaması olmaması için ayarlayabilirsiniz. – sharptooth
Ama 'stream.Write (buffer, 0, bytesRead)' satırında hata alıyorum, o zaman bunun çözümü nedir? Lütfen daha iyi anlayabilmem için değiştirilmiş kodunuzu sağlayabilir misiniz? Teşekkürler – Herin