WCF катастрофический провал - PullRequest
5 голосов
/ 06 октября 2009

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

Настройка

Я пытаюсь создать службу данных WCF, которая использует модель ADO Entity Framework для извлечения данных из БД. Я добавил ссылку на сервис WCF, и все, кажется, в порядке. У меня есть два набора вызовов службы данных. Первый получает список всех «пользователей» и возвращает (этот список не включает никаких зависимых данных (например, адрес, контакт и т. Д.). Второй вызов - когда выбирается «пользователь», запрос приложения включает еще несколько зависимых данных, таких как адрес, контактные данные, сообщения и т. д. с учетом идентификатора пользователя. Это также, кажется, работает нормально.

Лимон

После некоторого изменения выбора пользователя, т.е. вызывая более зависимые данные от службы данных, приложение перестает отвечать.

Ошибка сбоя:

Время ожидания канала запроса при ожидании ответа после 00: 00: 59.9989999. Увеличьте значение тайм-аута, передаваемое вызову Request, или увеличьте значение SendTimeout в Binding. Время, отведенное для этой операции, могло быть частью более длительного времени ожидания.

Я перезапускаю процесс отладки, но приложение не будет выполнять какие-либо вызовы службы данных, пока примерно через минуту или около того VS 8 отображает окно сообщения с ошибкой:

Невозможно обработать запрос от службы. http://localhost:61768/ConsoleService.svc'. Катастрофический сбой.

Я, черт возьми, погуглил эту ошибку и связанные с ней проблемы, но не нашел ничего полезного.

Возможные решения

Я нашел некоторые сведения об источнике проблемы. В app.config клиента:

  1. maxReceivedMessageSize> Установить более высокое значение, например. 5242880.
  2. receiveTimeout> Установить более высокое значение, например. 00: 30: 00

Я пробовал это, но все тщетно. Я подозреваю, что есть основная проблема, которая не может быть решена простым изменением некоторых чисел. Любые выводы будут высоко оценены.

Ответы [ 2 ]

6 голосов
/ 06 октября 2009

Я решил это = P.

Причина

Служба WCF работает нормально. Виновными были вызовы службы передачи данных. Каждый раз, когда я звонил, я создавал новую ссылку на службу данных, но никогда не закрывал / не удалял ссылку на службу. Поэтому после пары вызовов служба данных достигает максимального соединения и останавливается.

Решение

Убедитесь, что правильно закрыли / утилизировали любую ссылку на службу данных. Лучшая практика заключается в том, чтобы заключить в оператор использования.

using(var dataService = new ServiceNS.ServiceClient() )
{
    // Use service here        
}
// The service will be disposed and connection freed.
4 голосов
/ 06 октября 2009

Рад видеть, что вы исправили свою проблему.

Однако вы должны быть осторожны с использованием оператора using. Посмотрите на эту статью:

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

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