a specific issue with my ASP.NET application을 디버그하려고합니다.서버와의 연결을 끊지 않고 HttpWebRequest를 다시 사용할 수 있습니까?
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
}
와 Write()
가에 예외가 발생합니다 : 클라이언트는 다음과 같은 코드를 실행 "전송 연결에 데이터를 기록 할 수 없습니다. 설정된 연결이 호스트 컴퓨터의 소프트웨어에 의해 중단되었다" 본문. System.Net tracing을 사용했는데 Content-Length
과 함께 요청을 보내면 문제가 있다는 것을 알았습니다. 내가 서버 위의 코드에 using
문 안에 모든 것을 생략하면
은 특히 신속 WWW-Authenticate
로 응답하고 클라이언트는 WWW-Authenticate
로 요청을 재 게시하고 모든 업로드되지에서 파일을 제외하고 잘 가고 요청이 훨씬 나중에 실패합니다.
다음을 수행하고 싶습니다. 데이터없이 요청을 보내고 WWW-Authenticate
을 기다린 다음 WWW-Authenticate
및 데이터를 사용하여 반복하십시오. 그래서 위의 코드를 수정하려고 : 우선 모든 매개 변수를 설정 한 다음 GetResponse()
을 호출 한 다음 전송을 시도하지만 ContentLength
속성을 설정하려고하면 "이 속성은 쓰기가 시작된 후에 설정할 수 없습니다."라는 텍스트와 함께 예외가 발생합니다.
그래서 HttpWebRequest
은 재사용 할 수없는 것 같습니다.
연결을 닫지 않고 요청을 다시 보내려면 어떻게 다시 사용합니까?
나는 또한 동일한 문제가있다. 솔루션을 얻은 경우 수정 된 새 코드를 제공하거나 표시하여 도움이 될 것입니다. – Herin
@Herin : 인증 코드를 nonce와 함께 사용하면 해결할 수 없습니다. 기본 인증과 같은 것을 사용한다면 "인증"헤더를 설정하여'WWW-Authenticate '단계가 없도록 할 수 있습니다. – sharptooth
하지만 나는 'stream.Write (buffer, 0, bytesRead)'줄에 오류가있다. 그런 다음 그 해결 방법은 무엇인가. 좀 더 잘 이해할 수 있도록 수정 된 코드를 제공해 주실 수 있습니까? 고마워요 – Herin