У мене проблема з використанням виклику WCF зі служби Windows до моєї служби WCF, що працює на моєму веб-сервері. Цей дзвінок працює протягом декількох тижнів, але потім раптово перестав працювати і з того часу не працює.
Я отримую виняток:
Загальна помилка, що сталася System.ServiceModel.CommunicationException: сталася помилка під час надсилання запиту HTTP
а потім пише
Це може бути пов'язано з тим, що сертифікат сервера неправильно налаштовано за допомогою HTTP.SYS у випадку HTTPS. Це також може бути спричинено невідповідністю прив'язки безпеки між клієнтом та сервером.
Захистом, який я використовую на обох кінцях, є wsHttpBinding, без будь-якого шифрування. Він також просто використовує HTTP, а не HTTPS, тому я не впевнений, чому він скаржиться на HTTPS.
Решта внутрішнього стека винятків:
SystemNet.WebException: Базове підключення було закрито: під час надсилання сталася несподівана помилка. ---> System.IO.IOException: Неможливо записати дані до транспортного з'єднання: надано невірний аргумент. ---> System.Net.Sockets.SocketException: у System.Net.Sockets.Socket.MultipleSend (BufferOffsetSize [] буфери, SocketFlags socketFlags) на System.Net.Sockets.NetworkStream.MultipleWrite (BufferOffsetSize [BufferOffsetSize] буфери)
Слід також зазначити, що пункт у моїй програмі, де це відбувається, знаходиться на рядку "Виконати" виклику веб-служби - тобто, як тільки я зателефоную веб-службі і передаю їй загорнутий об'єкт DataContract, він підриває.
Все, що робить ця служба, - це передача великої кількості XML (передається як .NET-об'єкт для виклику на стороні клієнта), з яким вона потім виконує певну роботу. Можливо, передається близько 100-200 тис. XML. Я підняв обмеження для розмірів даних на обох кінцях до понад 6 мегабайт, але, здається, це не допомогло.
Будь-які ідеї?
Дещо більше інформації з цього питання:
Коли ми дублюємо клієнтське середовище локально, ми виявляємо, що ми не можемо завантажувати великі обсяги XML, якщо не внесемо такі зміни: 1. На сервері встановіть "maxRequestLength" на 100 МБ (набагато більше, ніж ми надсилаємо) 2. На клієнта, ми встановлюємо значення maxItemsInObjectGraph під тегом dataContractSerializer на "2147483646".
За допомогою цих змін наша локальна установка успішно завантажується. Однак установка клієнта на їх сервер все ще не вдається. Що цікаво зауважити, це те, що як тільки ми змінили значення maxRequestLength на сервері, наша тестова установка почала видавати помилку, що стосується налаштування maxItemsInObjectGraph. Тоді як на сервері нашого клієнта все ще трапляється оригінальна помилка "HTTP.sys".
Як я вже зазначав раніше, ми взагалі не використовуємо SSL, і є ще 2 виклики веб-служб, які виконують та завантажують XML однаково. Однак, оскільки неробочий дзвінок служби передає більше даних, це видається проблемою розміру.
Однак, якщо проблема, що виникає у клієнта, була такою ж, як у нашій тестовій установці, я не розумію, чому повідомлення про помилку клієнта не було пов'язане з помилкою ObjectGraph.
Чи можливо, що ми просто отримуємо загальну помилку "недійсний параметр" "HTTP.sys" для кожної можливої помилки на клієнті (тобто вона справді отримує помилку objectGraph, але просто не відображає її?)