2011-02-05 3 views
8

WCF를 통해 웹 서비스를 구현하는 동안 문제가 발생합니다. 나는 메시지를 역 직렬화하는 동안 포맷터는 예외 을 던졌다WCF - Win App "XML 데이터를 읽는 동안 최대 문자열 내용 길이 (8192)가 초과되었습니다."

문자열 (XML), 점점 오류로 클라이언트 응용 프로그램에서 WCF 방법에 값을 전달 해요 동안 : 이 매개 변수를 역 직렬화하는 동안 오류가 발생했습니다 http://tempuri.org/:XmlEntity.

InnerException 메시지가

했다 '형 선택 System.String의 객체를 역 직렬화 오류가 발생했습니다. XML 데이터를 읽는 동안 최대 문자열 콘텐츠 길이 할당량 (8192)이 초과되었습니다. XML 판독기를 만들 때 XmlDictionaryReaderQuotas 개체의 MaxStringContentLength 속성을 변경하여이 할당량을 늘려이 할당량을 늘릴 수 있습니다. 라인 249, 위치 19 '.

클라이언트 web.configuration 파일에서 maxStringContentLength 값을 변경하려고했지만 오류는 동일하게 유지됩니다. 친절하게 해결책을 찾으십시오.

+2

구성 파일의 내용을 클라이언트와 서버 모두에 게시 할 수 있습니까? – Tridus

답변

7

서버와 클라이언트 모두에이 값을 늘려보십시오 :

<binding 
    name="myBinding" 
    maxReceivedMessageSize="2147483647"> 
     <readerQuotas 
      maxDepth="2147483647" 
      maxStringContentLength="2147483647" 
      maxArrayLength="2147483647" 
      maxBytesPerRead="2147483647" 
      maxNameTableCharCount="2147483647" /> 
</binding> 
+0

이미이 설정을 확인했지만 여전히 실패하고 있습니다. 내가 언급 한 속성의 값을 런타임에 체크했고 그들은 정확했다. –

+1

@Ashish Ranjan은이 사용자 정의 바인딩 ('myBinding')을 사용하도록 구성된 엔드 포인트입니까? –

+0

나는 어떤 사용자 정의 바인딩을 사용하지 않고있다. 나는 방금 basicHttpBinding의 속성을 수정했다. –

12

인 Ashish, 대린은 무시하고 당신이 있는지 여부를 확인할 수 있습니다 2147483647 maxStringContentLength의 가치를 높이기 위해은 BasicHttpBinding을 만들었해야 함을 의미 bindingConfiguration 속성과 동일한 binidng을 사용하도록 엔드 포인트를 구성했습니다. 예를 들어, 다음과 같은 바인딩을 만든

<basicHttpBinding> 
    <binding name="HandleLargeMessage" maxReceivedMessageSize="2147483647">   
     <readerQuotas maxDepth="2147483647" 
     maxStringContentLength="2147483647" 
     maxArrayLength="2147483647" 
     maxBytesPerRead="2147483647" 
     maxNameTableCharCount="2147483647" /> 
    </binding> 
당신은, 당신 여부를 확인 할 수

<endpoint 
    address="....." 
    binding="basicHttpBinding" bindingConfiguration="HandleLargeMessage" 
    contract="xxx" /> 

합니다 (bindingConfiguration 속성을 유의하시기 바랍니다)과 같은 구성을 바인딩 이상 사용하는 엔드 포인트를 구성 할 수 있습니다

벌써 했니? 가능성이 매우 높습니다.

이 작업을 이미 수행했는지 확인하고 싶다면 서비스 및 클라이언트 응용 프로그램에 대한 WCF 추적을 자세한 수준에서 캡처하고 sevice에서 호스트 구성 및 클라이언트 응용 프로그램에서 채널 구성에서 활동을 확인하십시오.

-1

maxStringContentLength의 크기를 늘려야합니다. 그러나 모든 값을 맹목적으로이 숫자로 늘려서는 안됩니다. 예를 들어 maxDepth는 XML의 중첩 수준과 관련이 있으며 기본값으로 두는 것이 좋습니다.

1

항상 WCF와 마찬가지로 MaxStringContentLength를 늘리는 프로그래밍 방식의 대안이 있습니다.

BasicHttpBinding binding = new BasicHttpBinding(); 
binding.ReaderQuotas.MaxStringContentLength = 2147483647 

host.AddServiceEndpoint(contract, binding, address); 
관련 문제