У меня проблема с использованием вызова 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 [] буферы)
Я должен также отметить, что точка в моей программе, где это происходит, находится в строке «Выполнить» вызова веб-службы, то есть сразу после того, как я вызову веб-службу и передам ей свернутый 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, но просто не показывает ее? )