2009-11-05 3 views
4

При работе с WCF много раз массаж исключений не помог нам решить проблему . Вышеуказанный массаж обычно является симптомом для одной из следующих проблем:Подключенное соединение было закрыто: соединение было неожиданно закрыто

  1. Значения возврата больше значения, которое было определено в файле конфигурации.
  2. Существует проблема с заходящего
  3. Существует проблема с сериализации данных

я испытал 3-ю проблему, которая была с перечислениями Проблема заключалась в том, что перечисление было явно определено конечной точкой ЗНАЧЕНИЯ

Public Enum FrequencyEnums 
     EveryTime = 1 
     OncePerHour = 2 
     OncePerDay = 3 
     OncePerWeek = 4 
     Never = 5 
    End Enum 

И частная собственность, которая с помощью этого перечисления был определен следующим образом

Private m_sendFrequencyID As FrequencyEnums 

Теперь, поскольку перечисление не имеет определение значения по умолчанию и потому что свойство не инициализирована явно и , поскольку значение перечисления для 0 отсутствует в перечислении и , поскольку значение по умолчанию перечисления независимо от указанного варианты всегда 0 Когда я пытался вернуть экземпляр этого класса к клиенту, я получил эту ошибку: Базовое соединение закрыто: соединение было закрыто неожиданно

решение является одним из следующих:

  1. Определить значение 0 для перечислений или
  2. Определить значение по умолчанию для свойства из значений перечисления.
  3. Назначьте начальное значение свойства

Мой вопрос, как я могу найти эту ошибку с помощью инструментов Microsoft, а не методом проб и ошибок?

ответ

1

Вам необходимо создать контракт с данными для перечисления. См.: http://consultingblogs.emc.com/merrickchaffer/archive/2007/04/03/Passing-Enum-values-into-WCF-Service-operations.aspx

+0

Вопрос в том, как определить проблему, а не как ее решить. Трудности состоят в том, чтобы выяснить это из этого исключения: «Основное соединение было закрыто: соединение было неожиданно закрыто», что мало говорит. – Kamarey

+0

Да, это одна из проблем с WCF, часто ошибка является очень общей или вводящей в заблуждение. Это означает, что вы не можете перейти от сообщения об ошибке к проблеме. Вам нужно посмотреть, что вы делаете, насколько это сообщение об ошибке. –

+1

WCF специально и по дизайну использует «маскировку ошибок», например. он по дизайну не показывает слишком много информации об ошибке. Давайте посмотрим правде в глаза - большую часть времени эта информация на самом деле не помогает конечному пользователю ... –

2

Обнаружили это некоторое время назад, пытаясь разрешить одно и то же сообщение об ошибке (у меня была другая проблема). Включение трассировки и использования svctraceviewer.exe для просмотра журнала трассировки мне очень помогло. Дополнительную информацию см. В следующем URL-адресе: Enable WCF Trace Log

Смежные вопросы