Mam problem z używaniem wywołania WCF z usługi systemu Windows do mojej usługi WCF działającej na moim serwerze sieci Web. To wezwanie działało przez kilka tygodni, ale nagle przestało działać i od tamtej pory nie działa.
Wyjątek, który otrzymuję, to:
Wystąpił błąd ogólny System.ServiceModel.CommunicationException: Wystąpił błąd podczas wysyłania żądania HTTP
a potem mówi
Może to być spowodowane faktem, że certyfikat serwera nie jest poprawnie skonfigurowany z HTTP.SYS w przypadku HTTPS. Może to być również spowodowane niezgodnością powiązania zabezpieczeń między klientem a serwerem.
Zabezpieczenia, których używam na obu końcach, to wsHttpBinding, bez żadnego szyfrowania. Używa też tylko protokołu HTTP, a nie HTTPS, więc nie jestem pewien, dlaczego narzeka na HTTPS.
Reszta wewnętrznego stosu wyjątków to:
SystemNet.WebException: połączenie podstawowe zostało zamknięte: wystąpił nieoczekiwany błąd podczas wysyłania. ---> System.IO.IOException: nie można zapisać danych w połączeniu transportowym: podano nieprawidłowy argument. ---> System.Net.Sockets.SocketException: podano nieprawidłowy argument w System.Net.Sockets.Socket.MultipleSend (bufory BufferOffsetSize [], SocketFlags socketFlags) w System.Net.Sockets.NetworkStream.MultipleWrite (BufferOffsetSize [] bufory)
Powinienem również zauważyć, że punkt w moim programie, w którym to się dzieje, znajduje się w wierszu „Execute” wywołania usługi sieciowej - to znaczy zaraz po wywołaniu usługi sieciowej i przekazaniu jej opakowanego obiektu DataContract, wysadza.
Wszystko, co robi ta usługa, to przekazywanie dużej ilości XML (przekazywanej jako obiekt .NET do wywołania po stronie klienta), z którym następnie wykonuje jakąś pracę. Prawdopodobnie przesyłanych jest około 100-200 tys. Plików XML. Podniosłem limity rozmiarów danych na obu końcach do ponad 6 megabajtów, ale to nie pomogło.
Jakieś pomysły?
Więcej informacji na ten temat:
Kiedy lokalnie powielamy środowisko klienta, okazuje się, że nie możemy przesłać dużych ilości XML, chyba że dokonamy następujących zmian: 1. Na serwerze ustaw "maxRequestLength" na 100 MB (dużo więcej niż wysyłamy) 2. Włącz klienta, ustawiliśmy wartość maxItemsInObjectGraph pod tagiem dataContractSerializer na „2147483646”.
Dzięki tym zmianom nasza lokalna instalacja zostanie pomyślnie przesłana. Jednak instalacja klienta na serwerze nadal kończy się niepowodzeniem. Co ciekawe, gdy zmieniliśmy wartość maxRequestLength na serwerze, nasza instalacja testowa zaczęła generować błąd związany z ustawieniem maxItemsInObjectGraph. Podczas gdy na serwerze naszego klienta nadal występuje pierwotny błąd „HTTP.sys”.
Jak zauważyłem wcześniej, w ogóle nie używamy SSL, a istnieją 2 inne wywołania usług internetowych, które wykonują i przesyłają XML w ten sam sposób. Jednak ponieważ niedziałające wywołanie serwisowe przesyła więcej danych, wydaje się, że jest to problem z rozmiarem.
Jeśli jednak problem, który ma klient, był taki sam, jak nasza instalacja testowa, nie rozumiem, dlaczego komunikat o błędzie klienta nie miałby być powiązany z błędem ObjectGraph.
Czy to możliwe, że po prostu otrzymujemy ogólny błąd „nieprawidłowy parametr” „HTTP.sys” dla każdego możliwego błędu na kliencie (tj. Tak naprawdę pojawia się również błąd objectGraph, ale po prostu go nie wyświetla?)