2011-11-13 10 views
6

하나님 당신은 WCF를 좋아하지 않습니다.무시 무시한 WCF BAD 요청 400이기 때문에 여전히 maxReceivedMessageSize 65536

가능한 모든 스레드를 읽었지만 지금은 정말 고생하고 있습니다.

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BaseHttp" 
        maxBufferSize="4194304" 
        maxBufferPoolSize="4194304" 
        maxReceivedMessageSize="4194304" /> 
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="TaskServiceBehavior"> 
      <serviceMetadata httpGetEnabled="True" /> 
      <serviceDebug includeExceptionDetailInFaults="True" /> 
     </behavior> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="TaskServiceBehavior" name="TaskService"> 
     <endpoint 
      address="http://www.mysite.com/TableTaskService/TableTaskService.svc" 
      binding="basicHttpBinding" bindingConfiguration="BaseHttp" 
      contract="TableTaskService.ITableTaskService" /> 
     <endpoint 
      address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
       <add baseAddress="http://www.mysite.com/TableTaskService/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <serviceHostingEnvironment> 
     <baseAddressPrefixFilters> 
     <add prefix="http://www.mysite.com/" /> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 
</system.serviceModel> 

가 지금은 메시지를 보내고이 기본 예외 (svclog 파일에서 톱을) 던져 : 여기

는 WCF 구성입니다

수신 메시지의 최대 메시지 크기 할당량 (65536)이 을 초과했습니다. 할당량을 늘리려면 적절한 바인딩 요소에 MaxReceivedMessageSize 속성을 사용합니다.

이제는 분명히 4MB로 지정해야합니다.

내 클라이언트 코드 :

TableTaskServiceClient client = 
    new TableTaskServiceClient(
      new BasicHttpBinding { MaxBufferSize = 4194304, 
           MaxReceivedMessageSize = 4194304 }, 
      new EndpointAddress(GetEndpointAddressString()) 
    ); 

그러나 그것은 날이 65536 크기 오류가 발생합니다.

또한 클라이언트가 MaxReceivedMessageSize을 서버와 동일한 값으로 설정해야합니까? 서버가 클라이언트가 아니라 길이를 결정하는 것은 논리적이라고 생각합니다.

또한이 경고 메시지가 표시됩니다 (즉, 무시되는 요소에 대한 정보가 없거나 누락 된 정보가 없음). basichttpbinding은 정확히 재정의 된 내용입니다. 그런데 왜 그랬을까요? 어쨌든 :

는 [TraceRecord] 심각도 경고 TraceIdentifier http://msdn.microsoft.com/en-US/library/System.ServiceModel.OverridingDuplicateConfigurationKey.aspx 설명 구성 시스템은 다른 구성의 범위가 중복 키를 감지하고 최근 값으로 오버라이드한다. 응용 프로그램 도메인/LM/W3SVC/11/ROOT/TableTaskService - 33-1296567 소스 System.ServiceModel.Configuration.ServiceBehaviorElementCollection/-851144413 ElementName을 동작 0

NewElementLineNumber 0 OldElementLineNumber는 UPDTE : 서비스와 클라이언트 모두를 다시 구성 :

TableTaskServiceClient client = new TableTaskServiceClient(
         new BasicHttpBinding { 
          MaxBufferSize = 4194304, 
          MaxReceivedMessageSize = 4194304, 
          MaxBufferPoolSize=4194304, 
          ReaderQuotas = new XmlDictionaryReaderQuotas 
               { 
                MaxArrayLength = 4194304, 
                MaxBytesPerRead = 4194304, 
                MaxDepth = 4194304, 
                MaxNameTableCharCount = 4194304, 
                MaxStringContentLength = 4194304 
               } 
         }, new EndpointAddress(GetEndpointAddressString())); 

같은 오류가 계속 발생합니다.

그게 내가이 시도 467,000의 바이트 [] 배열 ~ 길이

답변

1

을 보내고 일부 관심 인 경우 :

<basicHttpBinding> 
    <binding name="BaseHttp" 
      maxBufferSize="4194304" 
      maxBufferPoolSize="4194304" 
      maxReceivedMessageSize="4194304"> 
    <readerQuotas maxArrayLength="4194304" 
        maxBytesPerRead="4194304" 
        maxDepth="4194304" 
        maxNameTableCharCount="4194304" 
        maxStringContentLength="4194304" 
        /> 
    </binding> 
</basicHttpBinding> 

이러한 설정 중 일부는 이해할 수 없지만 간단히 큰 값으로 설정합니다.

또한이 작업을 얻은 후에는 사이트에서 DoS attacks을 막기 위해 값을 줄이는 것이 좋습니다.

+0

같은 오류가 발생했습니다. 이 구성이 서비스 구성 (BaseHttp1로 변경됨, 오류가보고 됨, 다시 변경됨, 서비스가 브라우저에서 정상적으로 작동 함)에 사용되었음을 몇 번 확인했지만 여전히 동일합니다. 나는 그것이 일해야한다고 생각한다.. 그러나 그것은 단지하지 않는다. –

+0

서비스와 클라이언트를 모두 구성하고 있습니까? 왜냐하면 클라이언트 쪽에서 모자 세팅이있을 것 같은데. –

+0

예는 두 위치를 모두 재구성했습니다. –

관련 문제