Существующее соединение было принудительно закрыто удаленным хостом – WCF

У меня есть веб-сервис WCF, который работает нормально. Однако есть один конкретный вызов, который терпит неудачу, но только для некоторых пользователей. Вызов довольно прост – это вызов для получения списка объектов Person.

Для пользователя A он отлично работает. Служба запрашивает базу данных, создает список объектов Person и возвращает ее обратно вызывающему приложению.

Для пользователя B он терпит неудачу. Странно то, что когда я отлаживаю службу, похоже, все нормально. Он может запрашивать базу данных и создает объект List и возвращает его. Сама услуга никогда не терпит неудачу. Но клиентское приложение получает сообщение «Существующее соединение было принудительно закрыто удаленным хостом».

Для меня кажется, что что-то происходит, когда уровень сервиса пытается упаковать данные в формате XML, чтобы отправить обратно вызывающему приложению. Я думаю, что это должна быть проблема, связанная с данными, потому что вызов отлично работает для других пользователей. Я визуально просмотрел данные, и я не вижу ничего странного. Можно догадаться, что данные для пользователя B имеют некоторые напуганные скрытые символы или что-то еще, и поэтому вызывает неожиданное закрытие службы. Что-то вроде того.

Есть идеи?

Лучшее, что я нашел для диагностики таких вещей, это просмотрщик трассировки службы. Это довольно просто настроить (при условии, что вы можете редактировать конфиги):

http://msdn.microsoft.com/en-us/library/ms732023.aspx

Надеюсь это поможет.

У меня была эта проблема, потому что у моего сайта не было сертификата, привязанного к порту SSL. Я думал, что упомянул об этом, потому что я не нашел этот ответ нигде в googleweb, и мне потребовалось несколько часов, чтобы понять это. В средстве просмотра событий ничего не появилось, что было совершенно потрясающе для его диагностики. Надеюсь, это избавит кого-то от боли.

Я это видел однажды. Являются ли пользователи запрашивают разные объемы данных? Я обнаружил, что даже если вы можете настроить привязку для данных (например, maxReceivedMessageSize ), httpRuntime maxRequestLength превосходит настройку WCF, поэтому, если IIS пытается выполнить запрос, который превышает это, он проявляет это поведение.

Подумайте об этом так:

Если maxReceivedMessageSize составляет 12 МБ в вашем поведении WCF, а maxRequestLength – 4 МБ (по умолчанию), выигрывает IIS.

Я обнаружил, что вы можете получить эту ошибку, если возвращаемый объект имеет только авто-свойства getter, которые инициализируются в конструкторе (с синтаксисом C # 6.0).

Я полагаю, что это связано с десериализацией объектов WCF на стороне клиента с использованием конструктора без параметров, а затем задания свойств объекта. Он должен иметь ansible set (он может быть закрытым) для заполнения объекта, иначе он не удастся.

Я только что сделал эту ошибку сейчас только на сервере, и решение было установить атрибут maxItemsInObjectGraph в wcf web.config в :

  

У меня такая же проблема. Мое решение таково:

Если вы используете LinQ2SQL в своем проекте, откройте свой файл dbml в Visual Studio и измените режим Serialization на «Unidirectional» on

Я выбрал одно и то же исключение и нашел InnerException: SocketException. в следе svclog.

После просмотра в журнале событий Windows я увидел ошибку, исходящую из classа System.ServiceModel.Activation.TcpWorkerProcess .

Вы размещаете свою службу wcf в IIS с помощью netTcpBinding и совместного использования портов?

Кажется, есть ошибка в функции совместного использования портов IIS, проверьте исправление :

Мое решение заключается в размещении службы WCF в службе Windows.

Потянув мои волосы за 6 часов от этой совершенно бесполезной ошибки, моя проблема закончилась тем, что мои data transfer objects были слишком сложными. Начните с uber простых свойств, таких как public long Id { get; set;} public long Id { get; set;} вот и все … ничего необычного.

У меня был вопрос о сериализации. Причина в том, что некоторые из моих DTO / бизнес-classов и свойств были переименованы или удалены без обновления справочной службы. Я удивлен, что вместо этого я не получил contract filter mismatch error . Но обновление службы ref исправило ошибку для меня (ту же ошибку, что и OP).

В моем случае это было также с сериализацией. Мне нужно добавить [KnownType(typeof(...)] для всех classов, которые могут появляться в сериализации.

У меня возникла эта проблема при отладке одного веб-проекта на веб-службу в том же решении. Веб-служба возвращала ответы, которые веб-проект не мог понять. В некоторых случаях это снова будет работать, а затем снова остановится.

Это связано с тем, что между этими проектами не было явной ссылки, поэтому веб-служба не создавалась при нажатии F5 для начала отладки. Как только я добавил, ошибки ушли.

Interesting Posts

Открытие книги Excel 2003 в Excel 2010 32-бит вызывает ложную циркулярную ссылку и сбои

Установка другой версии Windows 8 в системе OEM

Каковы различия между обычным и тонким пакетом jquery?

Условное ведение журнала с помощью log4j

ASP.NET MVC Pass-объект из пользовательского фильтра действий в действие

Масштабированный битмап, поддерживающий соотношение сторон

Как настроить масштаб области чтения Outlook?

NSString tokenize в Objective-C

Как я могу перечислить все IP-адреса в подключенной сети, предпочтительно с помощью терминала?

Зачем начинать ArrayList с начальной пропускной способностью?

Проверка жесткого диска с использованием инструментов dd и md5sum

Запускайте внешнюю программу одновременно и общайтесь с ней через stdin / stdout

Как я могу реализовать пользовательскую атомную функцию с несколькими переменными?

Как получить объект родительского базового classа super.getClass ()

Какие заголовки в стандартной библиотеке C ++ гарантированно include другой заголовок?

Давайте будем гением компьютера.