2016-07-27 10 views
0

일부 파일을 수신 (업로드)하기 위해 HttpHandler를 작성했습니다. IIS 8에서 실행 중입니다. 내 코드는 작동하지만 매우 작은 파일 (< 1-2 MB)에만 적용됩니다. 큰 파일의 경우 코드가 충돌하기 때문에 예외가 발생하지 않고 "500 내부 서버 오류"메시지가 클라이언트로 전송됩니다.스트림 크기로 인해 HttpHandler에서 크래시가 발생했습니다.

내 코드는 다음과 같습니다

내 디버거를 집착
 int bufferSize = 4096; 
     string parameterString; 

     using (var bs = context.Request.GetBufferlessInputStream(true)) 
     using (var ms = new MemoryStream()) 
     { 
      byte[] fileContents = new byte[bufferSize]; 
      int charsRead = bs.Read(fileContents, 0, bufferSize); 

      while (charsRead > 0) 
      { 
       ms.Write(fileContents, 0, bufferSize); 
       charsRead = bs.Read(fileContents, 0, bufferSize); 
      } 

      parameterString = Encoding.UTF8.GetString(ms.ToArray()); 
     } 

그냥 마지막 줄에서 멈 춥니 다.

내 설정은 다음과 같습니다 : 내 마지막 줄이 문제가해야하는 이유를 이해하지 않는 한이 시점에서 잃었어요

<basicHttpBinding> 
    <binding name="XXXX" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="21474836470" maxBufferSize="2147483647" maxReceivedMessageSize="21474836470"> 
     <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" /> 
    </binding> 
    </basicHttpBinding> 

? 다른가요?

답변

0

무슨 일이 있어도 ..., 가장 좋은 방법은 덩어리에서 파일을 업로드하는 것입니다 결국

은 그래서 당신은 당신의 접근 방식을 재고 할 필요가 너무 커서로 한 번에 업로드 할 수있는 파일을 ...있을 것입니다/부분품. 이 sample

이러한 요구에 대해 살펴 것은 덩어리 최대 파일에 대한 힌트에 대한 클라이언트/서버 측에게

0

감사를 처리 할 수 ​​있습니다. 조만간 투자 할 생각입니다.

는이 코드로 끝내었고, 적어도 내 현재의 요구 사항에 대한 도움 : 내 이전의 접근 방식은하지 않았지만 정확히 작동하는 이유

parameterString = new StreamReader(context.Request.GetBufferlessInputStream(true)).ReadToEnd(); 

는 나도 몰라하지만 헤이 ... 그렇게 작동 멀리 ...