2013-04-02 4 views
2

파일을 전송하는 사용자 인 wcf 서비스가 있습니다. 메신저 basicHttpBinding 스트리밍 모드를 사용하여. 나는 web.config 및 app.config (클라이언트 측)에서 일부 값을 올바르게 구성했습니다. 그러나 예상대로 작동하지 않습니다. 최대 1,610,611,200 바이트를 전송하고 수신 할 수 있으며 이는 거의 1.5GB입니다. 매번이 크기보다 큰 파일을 서버에 업로드 할 때마다이 제한에서 내 서비스 메소드가 "스트림을 읽을 때 예외가 발생했습니다."라는 오류가 발생합니다. 예외. 이 크기보다 큰 파일을 다운로드하려고하면 "System.OutOfMemoryException 유형의 예외가 발생했습니다."라는 오류가 발생합니다. 예외. 다음은 설정 파일과 관련된 부분입니다. 누군가가 나에게이 문제를 알기 위해 어떤 점을 줄 수 있기를 바랍니다. wcf는 메모리 부족 오류가 많은 파일을 스트리밍합니다.

<basicHttpBinding> (web config) 
    <binding name="StreamServiceHttpBinding" receiveTimeout="01:00:10" sendTimeout="03:00:30" maxBufferPoolSize="2147483647" 
     maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" 
     transferMode="Streamed"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
     maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    </basicHttpBinding> 

<basicHttpBinding> (app config) 
    <binding name="BasicHttpBinding_IStreamService" receiveTimeout="01:00:10" 
     sendTimeout="03:00:30" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" 
     maxReceivedMessageSize="2147483647" transferMode="Streamed"> 
     <readerQuotas maxDepth="128" maxStringContentLength="2147483647" 
     maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    </basicHttpBinding> 

은 BTW 나도 클라이언트에서 램의 서버 및 8기가바이트에서 8GB의 RAM을 가지고있다. 그것은 transferMode를 스트리밍했기 때문에 반드시 램을 사용하지는 않지만 메모리 문제라면 지금 생각하고 있습니다. ( 어떤 도움을 받으실 수 있습니다.)

+0

작은 덩어리로 스트리밍해야합니다. – jerjer

+3

여기에 대한 좋은 기사입니다 http://msdn.microsoft.com/en-us/library/ms733742.aspx – jerjer

+0

unfortuantely 나는이 문서에서 내 상황에 어떤 유익한 정보를 찾을 수 없습니다 :/많이 고마워, 좋은 것을 배웠습니다;) –

답변

0

지난 주에 동일한 문제가 발생했습니다. 해결책을 찾았습니다. 나는 maxReceivedMessageSize = "4294967295"(약 4 기가 바이트)로 변경하고 내 시간 제한을 증가했다.

의 app.config

<bindings> 
     <basicHttpBinding> 
     <binding name="GShare.Sharer" receiveTimeout="00:40:00" sendTimeout="00:40:00" maxReceivedMessageSize="4294967295" maxBufferSize="2147483647" maxBufferPoolSize="4294967295" transferMode="StreamedRequest"> 
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/> 
      <security mode="None"> 
      </security> 
     </binding> 
     </basicHttpBinding> 
</bindings> 

<system.webServer> 
    <security> 
     <requestFiltering> 
     <requestLimits maxAllowedContentLength="4294967295"/> 
     </requestFiltering> 
    </security> 
    </system.webServer> 

클라이언트의 web.config

<binding name="BasicHttpBinding_ISharer" closeTimeout="24:01:00" openTimeout="24:01:00" receiveTimeout="24:10:00" sendTimeout="24:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="4294967295" maxBufferSize="2147483647" maxReceivedMessageSize="4294967295" textEncoding="utf-8" transferMode="Streamed" useDefaultWebProxy="true" messageEncoding="Text"> 
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
      <security mode="None"> 
      <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
      <message clientCredentialType="UserName" algorithmSuite="Default" /> 
      </security> 
</binding> 
,

그 후, 나는 1.89GB 파일을 성공적으로 업로드했다.

+0

'System.OutOfMemoryException' 예외가 발생했거나 'maxReceivedMessageSize exceeded' 예외가 발생 했습니까? –

+0

재밌는 점은 시간 초과가 끝날 때까지 클라이언트가 정상적인 페이지를보고있을 때까지 오류가 발생하지 않았다는 것입니다. 내가 서버를 보았을 때 wcf는 1.5GB를 업로드했지만 조금 더 업로드하지는 않았습니다. 스레드 멈춤과 같은 코드 실행을 멈추게합니다. –

관련 문제