Проблема при общении со службой WCF с использованием netTcpBinding - PullRequest
2 голосов
/ 02 июня 2010

У меня служба WCF, запущенная на Windows Server 2008 RC2 IIS 7 без брандмауэра. Когда я пытаюсь вызвать его с помощью привязки netTcpBinding, я получаю следующее исключение:

System.TimeoutException: открытый операция не завершена в течение выделенное время ожидания 00:00:30. Время отведенный для этой операции может иметь был частью более длительного тайм-аута. ---> System.TimeoutException: тайм-аут передачи сокета после 00:00:30. Вы превысили тайм-аут установлен на вашей привязке. Время отведенный для этой операции может иметь был частью более длительного тайм-аута. ---> System.Net.Sockets.SocketException: A Попытка подключения не удалась, потому что подключенная сторона не правильно ответить через некоторое время или не удалось установить соединение, потому что подключенный хост не смог ответить
в System.Net.Sockets.Socket.Receive (байт [] буфер, смещение Int32, размер Int32, SocketFlags socketFlags) в System.ServiceModel.Channels.SocketConnection.ReadCore (байт [] буфер, смещение Int32, размер Int32, TimeSpan timeout, логическое закрытие) ...

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

Я сделал все шаги для настройки IIS с здесь . Вопросы:

  1. Кто-нибудь знает, в чем может быть проблема?
  2. Как я могу устранить неполадки / отладить это проблема?

1 Ответ

1 голос
/ 02 февраля 2011

Я так же, как и вы, разочарован этим вводящим в заблуждение сообщением об ошибке Если я не ошибаюсь, вы получаете это TimeoutException в течение первой секунды. Я могу заверить вас в вашей проблеме, связанной с проблемами безопасности или сериализации. Я отнес эту проблему к группе разработчиков Microsoft WCF, они, казалось, были удивлены, но ничего не услышали.

Первое предложение - взглянуть на настройки безопасности NetTcpBinding. Убедитесь, что и клиент, и служба имеют одинаковые настройки безопасности «с нуля» для начала (например, не шифрование сообщений и не безопасность на транспортном уровне). Если вы можете заставить его работать без безопасности, постепенно увеличивайте настройки безопасности.

Второе предложение: некоторые проблемы с сериализацией могут вызывать сбой службы: пустое пустое поле, перегруженные методы, смешивающиеся с операциями, неоднозначные имена контрактов, неправильные приведения. Это можно легко сделать с помощью утилиты настройки службы WCF (SvcConfigEditor.exe). Запустите службу, получите исключение, остановите его и откройте сгенерированные журналы трассировки с помощью инструмента просмотра трассировки службы WCF. Оба инструмента поставляются с .NET (не Visual Studio) и находятся в папке Program Files / Windows SDKs.

...