2013-02-20 7 views
1

나는 답을 찾을 수 없다는 당혹스러운 문제가 있습니다. WCF 서비스에 많은 양의 데이터를 업로드하려고하는데 큰 데이터 요청이 수락 된 후 64KB 제한 아래의 요청이 전송 될 때까지 첫 번째 및 후속 시도에서 413 오류를 반환합니다. 내 바인딩에서 maxReceivedMessageSize 및 maxStringContentLength 요소를 이미 확장했으며 초기 확장 요청이없는 경우 요청을 보낼 때이 문제를 수정합니다 (다른 오류 400이 반환되지 않으면 413이 반환되지 않음).WCF 서비스가 첫 번째로드시 413으로 응답합니다.

내 시스템은 IIS 7에서 실행되는 ASP.NET 3.5 응용 프로그램이며 WCF 서비스는 사용자 지정 바인딩, SOAP 메시지 및 클라이언트/서버 인증서를 사용합니다.

는 기본적으로 재생하기 위해 (2 개 서버에서 테스트)

  • IIS7 작업자 프로세스가
  • 이 64킬로바이트보다 큰 요청 보내기 시작 다음과 같다 : (413) 오류
  • 이보다 더 더 이상 요청을 보낼 반환 64킬로바이트는 : 64킬로바이트보다 413 오류
  • 보내기 요청 적은 반환 :
  • 이 64킬로바이트보다 큰 요청 보내기 200 유효한 비누 응답을 반환 : 200 유효한 비누 응답을 반환 더 이상 요청을 보낼 수 413 오류
  • 반환

    이 이
    • IIS7 작업자 프로세스가
    • 이 64킬로바이트보다 큰 요청 보내기 시작하십시오 maxReceivedMessageSize 및 maxStringContentLength 요소는 다음을 증가하지 않는 경우

    발생 64kb 초과 : 413 오류

  • 요청 보내기 64KB 미만 : 200 및 유효한 비누 응답
  • 보내기 64킬로바이트보다 큰 요청 : 400 오류

디버깅이 413 오류를 수신 할 때 서버가 정말 내 서비스를 초기화하지 않은 작은 요청이 온되면 초기화 제안하고 내 바인딩 규칙과 관심을 지불 반환 대량의 데이터를 허용합니다.

이것이 WCF 라이브러리 내부의 문제로 판단되며 업그레이드 할 수는 있지만 실제로는 옵션이 아니며 해결 방법이 필요합니다.

<system.web> 
    <httpRuntime maxRequestLength="65536" executionTimeout="1800"/> 
</system.web> 
<system.webServer> 
    <security> 
     <requestFiltering> 
      <requestLimits maxAllowedContentLength="67108864" /> 
     </requestFiltering> 
    </security> 
</system.webServer> 
<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="ServiceTlsBehavior" name="ELSLookupServiceTLS"> 
      <endpoint address="" binding="customBinding" bindingConfiguration="TlsBinding" contract="Lookup" /> 
     </service> 
    </services> 
    <bindings> 
     <customBinding> 
      <binding name="TlsBinding" closeTimeout="00:04:00" openTimeout="00:12:00" receiveTimeout="00:15:00" sendTimeout="00:05:00"> 

       <textMessageEncoding> 
        <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" /> 
       </textMessageEncoding> 
       <httpsTransport requireClientCertificate="true" maxReceivedMessageSize="6553600" maxBufferPoolSize="6553600" maxBufferSize="6553600" /> 
      </binding> 
     </customBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="ServiceTlsBehavior"> 
       <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
       <dataContractSerializer maxItemsInObjectGraph="6553600"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

내 서비스 구현 :

어떻게 든

기본 WCF의 최대받은 바이트 내 Web.config의에서 증가 어쩌면 문제의 서비스를 초기화 어떤 방법 또는 응용 프로그램 시작시의 라인을 따라 생각하고 있었다

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)] 
public class ELSLookupService : Lookup 
{ 
    //serivce call implemented here 
} 

답변

2

좋아, 문제는 여기에 누군가가 이걸로 실행해야합니다 : 그것은 SSL 트래픽과 IIS 초기에 실현되고 WCF와 관련이없는 것처럼 보입니다.

IIS의 uploadReadAheadSize 설정을 늘려야합니다.

IIS7에서는 이것을 웹에서 확장 할 수 있습니다.config : serverRuntime 요소 아래에 다음을 참조하십시오. http://www.iis.net/configreference/system.webserver/serverruntime

IIS6에서는 팝업이 표시 될 수 있으며 이는 사이트 별 IIS 설정입니다.

관련 문제