2011-02-05 13 views
8

Mam pewne problemy podczas wdrażania usługi sieci Web za pośrednictwem WCF. Podczas I m przechodzącą wartość w metody WCF od aplikacji klienckiej jako ciąg (XML), uzyskiwanie błęduWCF - Win App "Przekroczono maksymalny limit długości zawartości łańcucha (8192) podczas odczytu danych XML."

Program formatujący zwrócił wyjątek podczas próby deserializacji komunikatu : Wystąpił błąd podczas próby deserializacji parametr http://tempuri.org/:XmlEntity.

Komunikat InnerException był

„Wystąpił błąd podczas deserializacji obiekt typu System.String. Limit długości zawartości ciągów znaków (8192) został przekroczony podczas odczytu danych XML . Ten limit może zostać zwiększony o , zmieniając właściwość MaxStringContentLength na obiekcie XmlDictionaryReaderQuotas używanym przy tworzeniu czytnika XML. Linia 249, pozycja 19. '.

Próbowałem zmienić wartość maxStringContentLength w pliku web.configuration klienta, ale błąd pozostaje taki sam. Uprzejmie spróbuj znaleźć rozwiązanie jak najszybciej.

+2

Czy możesz opublikować zawartość plików konfiguracyjnych zarówno na kliencie, jak i na serwerze? – Tridus

Odpowiedz

7

Spróbuj zwiększyć tę wartość zarówno na serwerze i kliencie:

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

Już sprawdziłem te ustawienia, ale wciąż nie działa. Sprawdziłem przy uruchomieniu wartości wymienionych atrybutów i były one poprawne. –

+1

@Ashish Ranjan, czy twój punkt końcowy jest skonfigurowany do używania tego niestandardowego powiązania ('myBinding')? –

+0

Nie używam żadnego powiązania niestandardowego ... Właśnie zmodyfikowałem atrybuty basicHttpBinding –

12

Ashish, Darin oznacza, że ​​należy Utworzyliśmy BasicHttpBinding przesłonić i zwiększyć wartość MaxStringContentLength do 2147483647. można potwierdzić, czy skonfigurowałeś punkt końcowy tak, aby używał tego samego binidng z atrybutem bindingConfiguration. Na przykład, po utworzeniu wiązania tak,

<basicHttpBinding> 
    <binding name="HandleLargeMessage" maxReceivedMessageSize="2147483647">   
     <readerQuotas maxDepth="2147483647" 
     maxStringContentLength="2147483647" 
     maxArrayLength="2147483647" 
     maxBytesPerRead="2147483647" 
     maxNameTableCharCount="2147483647" /> 
    </binding> 

końcowy można skonfigurować do korzystania z wyżej wiążące konfigurację tak, (proszę zwrócić uwagę na atrybut bindingConfiguration)

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

można potwierdzić, czy ciebie już to zrobiliśmy? bardzo prawdopodobne, że tak nie jest w tym przypadku.

Jeśli już to zrobiłeś i chcesz sprawdzić, czy jest on używany, przechwyć ślady WCF dla usługi i aplikacji klienckiej na poziomie szczegółowym i sprawdź działania w Construct Host na sevice i Construct channel przy aplikacji klienckiej.

-1

Wielkość maxStringContentLength powinna zostać zwiększona. Ale nie powinieneś ślepo zwiększać wszystkich wartości do tego numeru. Na przykład maxDepth odnosi się do poziomów zagnieżdżania w XML i lepiej pozostawić wartość domyślną.

1

Jak zawsze w przypadku WCF, tutaj jest programowa alternatywa dla zwiększenia MaxStringContentLength.

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

host.AddServiceEndpoint(contract, binding, address); 
Powiązane problemy