У меня проблема с использованием вызова 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 [] буферы)
Я также должен отметить, что точка в моей программе, где это происходит, находится в строке «Execute» вызова веб-службы, то есть сразу после того, как я вызываю веб-службу и передаю ей завернутый объект DataContract, он взрывается.
Все, что делает эта служба, - это передача большого количества XML (переданного как объект .NET вызову на стороне клиента), с которым она затем выполняет некоторую работу. Вероятно, передается около 100-200k XML. Я увеличил пределы размеров данных на обоих концах до более 6 мегабайт, но это не помогло.
Есть идеи?
Дополнительная информация по этому вопросу:
Когда мы дублируем клиентскую среду локально, мы обнаруживаем, что не можем загружать большие объемы XML, если не внесем следующие изменения: 1. На сервере установите для параметра «maxRequestLength» значение 100 МБ (намного больше, чем мы отправляем) 2. Вкл. клиент, мы устанавливаем значение maxItemsInObjectGraph в теге dataContractSerializer равным «2147483646».
С этими изменениями наша локальная установка успешно загружается. Однако установка клиента на их сервер по-прежнему не выполняется. Интересно отметить, что как только мы изменили значение maxRequestLength на сервере, наша тестовая установка начала выдавать ошибку, конкретно связанную с параметром maxItemsInObjectGraph. В то время как на сервере нашего клиента по-прежнему происходит исходная ошибка «HTTP.sys».
Как я уже отмечал ранее, мы вообще не используем SSL, и есть 2 других вызова веб-сервисов, которые выполняют и загружают XML таким же образом. Однако, поскольку вызов неработающей службы передает больше данных, это, по-видимому, проблема размера.
Однако, если проблема, с которой столкнулся клиент, была такой же, как и при нашей тестовой установке, я не понимаю, почему сообщение об ошибке клиента не связано с ошибкой ObjectGraph.
Возможно ли, что мы просто получаем общую ошибку «недопустимый параметр» «HTTP.sys» для каждой возможной ошибки на клиенте (т. Е. Он действительно получает ошибку objectGraph, но просто не показывает ее?)