2010-10-05 17 views
8

Nie mam problemu z odzyskaniem dużej ilości danych, ale wysłanie z powrotem do usługi wyświetla ten błąd. Próbowałem dodać element do pliku web.config i servicereferences.clientconfig i nie jest on rozpoznawany w żadnej z nich. W pewnym momencie dostałem komunikat o dodaniu ReaderQuotas do bindingElementExtensions, ale nie mogę znaleźć niczego przydatnego, jak to zrobić. Znalazłem postów mówiąc, że musiałem zmodyfikować devenv.exe.config i takie, ale robiąc ten hosed VS. Próbowałem rozwiązać to przez dwa dni, więc każda pomoc będzie doceniona.Kolejny "Maksymalny limit długości zawartości ciągu (8192) został przekroczony podczas odczytu danych XML." problem z WCF i Silverlight 4

edit: oto sekcja wiązania web.config:

<bindings> 
    <customBinding> 
    <binding name="QaRiM.Web.Service1.customBinding0"> 
     <binaryMessageEncoding /> 
     <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" /> 
    </binding> 
    </customBinding> 
</bindings> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
    multipleSiteBindingsEnabled="true" /> 
<services> 
    <service name="QaRiM.Web.Service1"> 
    <endpoint address="" binding="customBinding" bindingConfiguration="QaRiM.Web.Service1.customBinding0" 
     contract="QaRiM.Web.Service1" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 

i servicereferences.clientconfig:

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <customBinding> 
       <binding name="CustomBinding_Service1"> 
        <binaryMessageEncoding /> 
        <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" /> 
       </binding> 
      </customBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://localhost:36533/Service1.svc" binding="customBinding" 
       bindingConfiguration="CustomBinding_Service1" contract="ServiceReference1.Service1" 
       name="CustomBinding_Service1" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

Oba zostały wygenerowane przez VS.

+0

można zakładać wiążących elementy swojego klienta i plików konfiguracyjnych usługi? Również punkt końcowy dla usługi, ponieważ powinien odwoływać się do wiązania. – Jab

Odpowiedz

9

Po prostu brakuje konfiguracji dla maximum string content length.

dodać go do obowiązujących atrybutów (klient i serwer)

<readerQuotas maxStringContentLength="2147483647" /> 

Niestety, nie zdawałem sobie sprawy, że ten element dziecko znajduje się pod kodowania używany podczas korzystania zwyczaj wiązania, wydaje się być binaryMessageEncoding w twoim przykładzie. Jeśli nie, wypróbuj inne kodowania z ustawieniem.

<bindings> 
    <customBinding> 
     <binding name="QaRiM.Web.Service1.customBinding0">     
      <binaryMessageEncoding> 
       <readerQuotas maxStringContentLength="2147483647"/> 
      </binaryMessageEncoding> 
     </binding> 
    </customBinding> 
</bindings> 
+1

To jest problem, to nie jest poprawny atrybut wiązania. –

+0

@Jim Perry, proszę spojrzeć na aktualizację mojej odpowiedzi. – Jab

+0

To też nie działa. To nie jest poprawne w konfiguracji usług, a wraz z nią w web.config każde wywołanie usług powoduje awarię aplikacji. –

1

edit: To zapisane niekompletny projekt, przepraszam

  1. synchronizacji definicji usługi/klient to, co zrobiłeś, ale jest to zdecydowanie konieczne, że pasują do siebie.
  2. Czy na pewno potrzebujesz niestandardowego powiązania? Czy próbowałeś używać ws (Dual) HttpBinding jako bazy?
  3. Ten wpis może być interesujący: silverlight 3 wcf service configuration -- getting maxreceivedmessagesize error, konkretnie ustawienie httpRuntime maxRequestLength = "2147483647".
  4. Może być konieczne ustawienie wartości maxBufferPoolSize i maxItemsInObjectGraph. Konfiguracja w połączonym poście SO prawie wszystko wyczerpała.
  5. Nie wiem, czy używasz metody proxy klienta ChannelFactory, czy metody odwołań do usługi, ale możesz przejść do poprzedniej trasy. W sesjach debugujących znajdowałem pewne wartości z konfiguracji, które nie były stosowane tak, jak myślałem, ale moja pamięć krótkoterminowa na ten temat jest teraz raczej zagubiona.
  6. W pewien sposób powiązany z # 5, można przejść do problemów klienta testowego WCF, w których klient testowy używa domyślnych powiązań, do których nie jesteś przygotowany.
  7. Kolejny post, które mogą być interesujące: http://www.haveyougotwoods.com/archive/2008/04/14/wcf-message-streaming.aspx

żywo jest prawdopodobnie najlepszym na stronie klienta, aby powstrzymać się od charakteru blokującego buforowanego transferMode. Nie znam szczegółów dotyczących tego, jak duże dane będą konsekwentne, ale Twoja usługa będzie wyglądać nieco ładniej po stronie klienta, jeśli pójdziesz tą drogą. Dobry podkład po skonfigurowaniu po stronie klienta do przesyłania strumieniowego można znaleźć tutaj: http://systemmetaphor.blogspot.com/2009/05/using-wcf-to-transfer-large-data-files.html.

Mam nadzieję, że jakaś kombinacja powyższych pomaga

+0

Przy użyciu śledzenia WCF nic nie jest wyświetlane. Fiddler był jedynym powodem, dla którego doszedłem do wniosku, że problem z długością maksymalnego łańcucha znaków jest problemem. Po prostu zgaduję, ale sprawa bindElementExtensions wydaje się być trafna, nie mogę znaleźć żadnych informacji, jak dodać ją poprawnie. –

+0

Bity, które wyróżniały się w dokumentach, które znajdowałem w Google, to

+0

Wygląda na to, że jesteś we właściwym kierunku, ale powinieneś być w stanie prześledzić, dlaczego aplikacja nie działa w ASP.NET. Używałem tylko WCF w Samo hostowanie trasy i chcę powiedzieć, że dało mi to trochę więcej swobody w określaniu dziwnych błędów, takich jak to, że coś takiego jak ASP.NET przeszkadzało (nie w ogóle w większości przypadków). –

0

Czy próbowałeś ustawiania maxStringContentLength w config za usługę? W mojej sytuacji ustawienie go na usługę dozwoloną dla klienta Silverlight, aby użyć żądanej wartości dla maxStringContentLength.

Jedna uwaga jest taka, że ​​jeśli zezwolisz na dłuższe łańcuchy, ale nie dostosowujesz maxReceivedMessageSize, może to również spowodować problemy. Numer maxReceivedMessageSize musi być kontrolowany zarówno na usłudze, jak i na kliencie, ponieważ nie będzie on dziedziczył wartości z innego.

2

jeśli Kontyngent długość maksymalna zawartość string (8192) została przekroczona podczas odczytywania danych XML.”Ignoruje ustawienia web.config nawet po ustawieniu można również rozwiązać problem w kodzie tworząc instancję XmlDictionaryReaderQuotas i ustawiania MaxStringContentLength do 2147483647

następnie wystarczy użyć instancji XmlDictionaryReaderQuotas widział tu mycreatedreaderquota

XmlDictionaryReaderQuotas mycreatedreaderquota = new XmlDictionaryReaderQuotas(); 
     mycreatedreaderquota.MaxStringContentLength = 2147483647; 

     XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(stream, mycreatedreaderquota); 
Powiązane problemy