Mam usługę WCF, która zwraca 1000 rekordów z bazy danych do klienta. Mam klienta WCF ASP.NET (dodałem odniesienie do usługi w projekcie aplikacji sieci web asp.net, aby korzystać z WCF).
Po uruchomieniu aplikacji klienckiej pojawia się następujący komunikat:
Limit maksymalnej wielkości wiadomości dla wiadomości przychodzących (65536) został przekroczony. Aby zwiększyć przydział, użyj właściwości MaxReceivedMessageSize na odpowiednim elemencie wiążącym.
Jakaś pomoc? Jak zwiększyć limit rozmiaru wiadomości?
Odpowiedzi:
Potrzebujesz czegoś takiego, aby zwiększyć limity wielkości wiadomości w pliku App.config lub Web.config :
I użyj nazwy powiązania w konfiguracji punktu końcowego, np
Uzasadnienie wartości jest proste, są one wystarczająco duże, aby pomieścić większość komunikatów. Możesz dostroić ten numer do swoich potrzeb. Niska wartość domyślna ma zasadniczo zapobiegać atakom typu DOS. Ustawienie 20000000 pozwoliłoby na skuteczność rozproszonego ataku DOS, domyślny rozmiar 64k wymagałby bardzo dużej liczby klientów, aby obezwładnić większość serwerów w dzisiejszych czasach.
źródło
Jeśli nadal pojawia się ten komunikat o błędzie podczas korzystania z klienta testowego WCF, to dlatego, że klient ma osobny MaxBufferSize ustawienie .
Aby rozwiązać problem:
Pojawi się lista edytowalnych ustawień, w tym MaxBufferSize.
Uwaga: Automatycznie generowani klienci proxy również domyślnie ustawiają MaxBufferSize na 65536.
źródło
Jeśli dynamicznie tworzysz powiązania WCF, oto kod do użycia:
źródło
WCF test klienta ma swój własny config klienta.
Uruchom klienta testowego i przewiń w dół. Po dwukrotnym kliknięciu węzła Plik konfiguracji zobaczysz reprezentację XML. Jak widać,
maxReceivedMessageSize
jest65536
.Aby go edytować, kliknij prawym przyciskiem myszy węzeł drzewa Plik konfiguracji i wybierz opcję Edytuj za pomocą
SvcConfigEditor
. Po otwarciu edytora rozwiń Wiązania i kliknij dwukrotnie powiązanie, które zostało automatycznie wygenerowane.Możesz edytować wszystkie właściwości tutaj, w tym
maxReceivedMessageSize
. Po zakończeniu kliknij Plik - Zapisz .Na koniec, gdy wrócisz do okna klienta testowego WCF, kliknij Narzędzia - Opcje .
UWAGA : Usuń zaznaczenie opcji Zawsze generuj ponownie konfigurację podczas uruchamiania usług .
źródło
Always regenerate config
opcję.Znalazłem łatwy sposób
źródło
Rozwiązuję problem ... w następujący sposób
źródło
Rozwiązałem swój problem na Bing Maps WPF w moim projekcie za pomocą CalculateRoute (). Rozwiązaniem w moim przypadku było ustawienie maxReceivedMessageSize i maxReceivedMessageSize dla atrybutu „httpTransport” dla sekcji „customBinding”.
W pliku Applications.config (np. MyApp.config) ustawiłem następującą konfigurację:
źródło
źródło
Dla HTTP:
Dla TCP:
WAŻNY:
Jeśli spróbujesz przekazać złożony obiekt, który ma wiele połączonych obiektów (np. Strukturę danych drzewa, listę zawierającą wiele obiektów ...), komunikacja nie powiedzie się bez względu na to, jak zwiększysz przydziały. W takich przypadkach należy zwiększyć liczbę obiektów zawierających:
źródło
maxItemsInObjectGraph
było (szybkie) rozwiązanie dla mnie. Ale zwiększając to, powinieneś pomyśleć o tym, czy lepszym rozwiązaniem jest, aby aplikacja żądała danych w porcjach, w przeciwieństwie do ogromnego wykresu obiektowego, który może obciążać zasoby.Dla mnie wszystko, co musiałem zrobić, to dodać
maxReceivedMessageSize="2147483647"
do klienta app.config. Serwer pozostał nietknięty.źródło
Kolejna ważna rzecz do rozważenia z mojego doświadczenia ...
Zdecydowanie odradzam maksymalizowanie maxBufferPoolSize, ponieważ bufory z puli nigdy nie są zwalniane, dopóki domena aplikacji (tj. Pula aplikacji) nie zostanie zrestartowana.
Okres dużego ruchu może spowodować, że pamięć będzie używana i nigdy nie zostanie zwolniona.
Więcej informacji tutaj:
źródło
Nie zapominaj, że pod uwagę zostanie wzięty app.config punktu wejścia wykonania, a nie ten w projekcie biblioteki klas zarządzającym wywołaniami usługi sieciowej, jeśli taki istnieje.
Na przykład jeśli pojawi się błąd podczas uruchamiania testu jednostkowego, musisz skonfigurować odpowiednią konfigurację w projekcie testowym.
źródło
dostałem ten błąd podczas korzystania z tych ustawień w pliku web.config
ustawiam takie ustawienia:
źródło
bindings
żywioł Nate'a i umieścił go jako część swojej odpowiedzi. Te2000000
wartości są dość wyraźne.