Mam aplikację klient-serwer, która komunikuje się za pomocą WCF i używa NetDataContractSerializer do serializacji wykresu obiektów.Serializuj wiadomość WCF w sposób binarny, a nie jako komunikat SOAP.
Ponieważ wiele danych jest przesyłanych między serwerem a klientem, próbowałem zmniejszyć jego rozmiar, dostosowując rozmiar elementów danych (np. Zmieniono int na krótki, long na int itp.).
Po zakończeniu strojenia dowiedziałem się, że ilość przesłanych danych nie zmieniła się!
Problem polega na tym, że NetDataContractSerializer serializuje wykresy obiektów do formatu XML, więc niezależnie od wielkości elementu danych ważna jest tylko wielkość jego wartości. Na przykład wartość 10023 elementu danych Int16 będzie serializowana jako ciąg "10023" (0x3130303233), zamiast tylko 10023 (0x2727).
Pamiętam, że w Remotingu mogłem użyć BinaryFormatter, który serializował wartości zgodnie z typem elementu danych, ale nie wiem, czy można go używać z WCF.
Czy ktoś ma rozwiązanie?
Więc czy kodowanie binarne wiadomość oferują znaczną poprawę wydajności? Czy czas serializacji jest skrócony, czy tylko zmniejsza się rozmiar wiadomości? –
Użyłem tego niestandardowego powiązania, jak również binaryMessageEncoding z nazwanym transportem rur, a wiadomości nadal są kodowane XML zgodnie z dziennikami komunikatów w detektorze śledzenia, a także w kliencie testowym WCF. Nie jestem w 100% pewny, że nie wykonują one własnej serializacji XML obiektów, aby je rejestrować, zamiast przyjmować surową wiadomość. WCF utrudnia dołączenie do surowego żądania/odpowiedzi w stosunku do WebAPI, co ułatwia. – AaronLS
Ta odpowiedź jest przydatna, ale należy pamiętać, że kodowanie binarne zmienia tylko sposób, w jaki wiadomość jest wysyłana "na drucie", tj. Po serializacji. Chociaż z pewnością zmniejsza to rozmiar danych, nie zmienia metody serializacji. Kodowanie binarne może być używane z kompresją w celu uzyskania lepszych wyników. –