2008-09-16 14 views
4

J2ME 클라이언트가 청크 분할 전송 인코딩과 함께 HTTP POST 요청을 전송 중입니다.청크 분할 전송에 대한 본문 읽기는 ASP.NET에서 HTTP 요청을 인코딩 함

ASP.NET (IIS6과 WebDev.exe.server 모두)에서 요청을 읽으려고하면 Content-Length가 0으로 설정됩니다. 요청 길이가 알려지면 Content-Length를 알 수 없으므로이 값은 OK입니다. . 나는 끝에 Request.InputStream을 읽을 때

은 그러나, 여기에 0

를 반환 내가 입력 스트림을 읽기 위해 사용하고 코드입니다.

using (var reader = new StreamReader(httpRequestBodyStream, BodyTextEncoding)) { 
    string readString = reader.ReadToEnd(); 
    Console.WriteLine("CharSize:" + readString.Length); 
    return BodyTextEncoding.GetBytes(readString); 
} 

필자와 함께 클라이언트의 행동을 시뮬레이션 할 수 있습니다.

URL http://localhost:15148/page.aspx

헤더 : 사용자 에이전트 : 피들러 전송 - 인코딩 : 청크 호스트 : somesite.com:15148

바디 토끼 토끼 토끼 토끼. 와 주셔서 감사합니다. 매우 유용했습니다! 위에서

내 몸 리더

사람이 IIS 및 ASP.NET 개발 서버 (카시니)에 청크 분할 인코딩을 사용하도록 설정하는 방법을 알고 있나요 ... 절름발이 제로 길이의 바이트 배열을 반환합니다?

IIS에 대해 this script을 찾았지만 작동하지 않습니다.

답변

1

URL이 더 이상 작동하지 않으므로 직접 테스트하는 것이 어렵습니다. 나는 이것이 효과가 있을지 궁금했고, 구글은 bytes.com에서 그것과 함께 경험이있는 사람을 발견했다. 다시 웹 사이트를 올리면이 사이트가 실제로 작동하는지 확인할 수 있습니다.

인 Joerg Jooss 썼다 : (약간 간결에 대한 수정 )

string responseText = null; 
WebRequest rabbits= WebRequest.Create(uri); 
using (Stream resp = rabbits.GetResponse().GetResponseStream()) { 
    MemoryStream memoryStream = new MemoryStream(0x10000); 
    byte[] buffer = new byte[0x1000]; 
    int bytes; 
    while ((bytes = resp.Read(buffer, 0, buffer.Length)) > 0) { 
     memoryStream.Write(buffer, 0, bytes); 
    } 
    // use the encoding to match the data source. 
    Encoding enc = Encoding.UTF8; 
    reponseText = enc.GetString(memoryStream.ToArray()); 
} 
2

공식 것 같다 : Cassini does not support Transfer-Encoding: chunked requests. 기본적으로

, 클라이언트가를 사용하여 큰 바이너리 스트림을 전송 청크 분할 된 HTTP 전송 인코딩. 은 ASP.NET 개발 서버가 인코딩의이 종류를 지원하지 않기 때문에 , 당신은 큰 바이너리 스트림을 수용해야 스트리밍 데이터 서비스를 호스팅 할 이 웹 서버를 사용할 수 없습니다.

관련 문제