2011-08-02 16 views
9

Błąd w deserializacji treści komunikatu odpowiedzi dla operacji "CreateTransactionEntity". Maksymalny limit długości treści ciągu (8192) został przekroczony podczas odczytu danych XML. Ten limit może zostać zwiększony poprzez zmianę właściwości MaxStringContentLength na obiekcie XmlDictionaryReaderQuotas używanym podczas tworzenia czytnika XML.Maksymalny limit długości zawartości ciągu (8192)

Hej, wciąż otrzymuję ten błąd, mimo że mają większą niż życie węzeł readerQuota na moim pliku web.config ...

<system.serviceModel> 
<bindings> 
    <netTcpBinding> 
    <binding name="BindingTcp" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" closeTimeout="00:10:00"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" 
        maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    </netTcpBinding> 

Po przeglądania Internetu na ten temat, nie może wymyślić przyzwoitej odpowiedzi. Jeśli masz jakąkolwiek radę, naprawdę to doceniam.

+0

Czy pliku web.config Twojego serwera? Ponieważ komunikat o błędzie wydaje się pochodzić od klienta (to błąd deserializacji odpowiedzi). Jaki jest twój kod klienta? –

+0

Czy jesteś pewien, że twoja usługa/klient używa konfiguracji? Czy możesz opublikować zarówno ślad stosu błędów, jak i plik konfiguracyjny * full * (z definicją )? – carlosfigueira

+0

Może zajść potrzeba sprawdzenia konfiguracji klienta. – Jack

Odpowiedz

15

Aby zapewnić, że wartości określone dla powiązania zostaną pobrane, należy przypisać nazwę wiązania z elementu <binding> do atrybutu bindingConfiguration elementu <endpoint>. Jeśli nie, WCF użyje wartości domyślnych dla określonego powiązania.

<system.serviceModel> 
    <bindings> 
    <netTcpBinding> 
     <binding name="BindingTcp" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" closeTimeout="00:10:00"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
     </binding> 
    </netTcpBinding> 

W powyższym przykładzie, przypisano „BindingTCP” jako imię w swoim elemencie <binding>. Więc w swoim końcowym to zrobić:

<endpoint address="net.tcp://some.website.url/yourserivce" binding="netTcpBinding" bindingConfiguration="BindingTCP" contract="IYourContract" /> 

W zależności od tego, gdzie jest błąd (na kliencie lub na serwerze), który określi plik konfiguracyjny musi zostać zmodyfikowany. Jeśli błąd występuje na obu końcach, zmodyfikuj oba pliki konfiguracyjne.

1

Należy sprawdzić aplikację kliencką, aby sprawdzić, czy używa ona domyślnej konfiguracji wiązania. Szybszym sposobem potwierdzenia tego jest przechwycenie śledzenia WCF na poziomie szczegółowym i sprawdzenie zdarzeń związanych z działaniem Construct ChannelFactory.

HTH, Amit Bhatia

+0

To są wszystkie dobre odpowiedzi. To, co naprawdę się stało, to, że naprawdę nie umieszczałem nazwy wiązania w moim elemencie końcowym i dodawałem usługę do mojego projektu za pomocą narzędzia do refrenu usługi. Myślę, że ustawia pewne atrybuty na wartości domyślne. Zmieniłem te wartości i wszystko wydaje się działać. – SoftwareSavant

Powiązane problemy