Ошибка WCF «Это может быть связано с тем, что сертификат сервера не настроен должным образом с HTTP.SYS в случае HTTPS» - PullRequest
64 голосов
/ 06 января 2010

У меня проблема с использованием вызова 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, но просто не показывает ее? )

Ответы [ 19 ]

1 голос
/ 15 февраля 2010

Если вы используете режим передачи = поток, попробуйте изменить его на буферизованный.

Если это не проблема, не могли бы вы опубликовать свою конфигурацию.

1 голос
/ 17 февраля 2010

Поскольку все работало нормально в течение нескольких недель, а затем прекратилось, я сомневаюсь, что это как-то связано с вашим кодом. Возможно, ошибка возникает, когда служба активирована в IIS / ASP.NET, а не при вызове вашего кода. Среда выполнения может просто проверять конфигурацию веб-сайта и выдавать общее сообщение об ошибке, которое не имеет никакого отношения к службе.

Я подозреваю, что срок действия сертификата истек или что привязки установлены неправильно. Если веб-сайт неправильно настроен для HTTPS, независимо от того, использует он ваш код или нет, возможно, вы получаете эту ошибку.

1 голос
/ 21 октября 2015

Попробуйте просмотреть сервис в браузере и в режиме Https, если он недоступен для просмотра, то это доказывает причину этой ошибки. Теперь, чтобы решить эту ошибку, вам необходимо проверить:

  • https порт, проверьте, не используется ли он другими ресурсами (веб-сайтом)
  • Проверка правильности настройки сертификата для https (проверка полномочий подписи, самозаверяющего сертификата, использование нескольких сертификатов)
  • проверка привязки и конфигурации службы WCF для режима Https
1 голос
/ 20 декабря 2018

Нашей проблемой было просто то, что номер порта на конечной точке был неправильно установлен на 8080. Изменил его на 8443, и он работал.

1 голос
/ 06 января 2010

Я видел эти особые исключения, связанные с проблемами Complex DataType, см. Следующий пост, если вы передаете коллекции или перечисления:

Сложные типы данных

0 голосов
/ 06 августа 2012

Только недавно испытал это:

System.ServiceModel.CommunicationException:

Произошла ошибка во время сделать HTTP-запрос к http://example.com/WebServices/SomeService.svc. Это может быть связано к тому, что сертификат сервера не настроен должным образом с HTTP.SYS в случае HTTPS. Это также может быть вызвано несоответствие привязки безопасности между клиентом и сервером.

---> System.Net.WebException: основное соединение было закрыто: при отправке произошла непредвиденная ошибка.

---> System.IO.IOException: невозможно записать данные в транспортное соединение: существующее соединение было принудительно закрыто удаленным хозяйничать.

Я узнал от администратора, что пул приложений IIS, на котором размещалась веб-служба, автоматически перезагружался после нехватки памяти. Ошибка на клиенте произошла при перезапуске пула приложений.

Увеличение объема памяти, доступной для пула приложений, решило немедленную проблему.

0 голосов
/ 30 марта 2017

Только недавно испытал это:

System.ServiceModel.CommunicationException:

Произошла ошибка при отправке HTTP-запроса на http://example.com/WebServices/SomeService.svc. Это может быть связано с тем, что сертификат сервера неправильно настроен с HTTP.SYS в случае HTTPS. Это также может быть вызвано несоответствием привязки безопасности между клиентом и сервером.

---> System.Net.WebException: базовое соединение было закрыто: при отправке произошла непредвиденная ошибка.

---> System.IO.IOException: невозможно записать данные в транспортное соединение: существующее соединение было принудительно закрыто удаленным хостом.

Срок действия нашей лицензии на прокси-сервер bluecoat истек! так что не было возможности дозвониться до внешней стороны (интернет).

0 голосов
/ 29 января 2016

Наши приложения были недавно отключены от SSL к TLS через обновление ОС сетевого устройства (F5). Мы исправили эту ошибку, заново сгенерировав самоподписанные сертификаты. Надеюсь, что это поможет кому-то в будущем решить проблему, поскольку мы провели поиск и устранение неисправностей в нескольких окнах обслуживания, прежде чем прийти к решению.

0 голосов
/ 31 марта 2017

У нас была та же проблема, и в нашем случае она была решена путем переустановки сертификата и повторного создания привязки. Что привело нас к тому, что даже получение простого png-файла изображения на сайте выдает ту же ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...