2009-02-13 2 views
2

Я столкнулся с странной проблемой с моей службой WCF, используя привязку WS. Когда я настраиваю его без сеансов (безопасность/надежность), он работает отлично, но не так с сеансами. Например, когда я настраиваю с безопасностью (безопасность сообщений, учетные данные Windows), я получаю тайм-аут после 10-го или 11-го звонков. Мой сервис вызывает другую службу WCF, но оба сервиса настроены с одинаковыми параметрами привязки.Как вы отлаживаете проблему WCF?

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

ответ

1

Лучший способ отладки такого сценария - активировать трассировку в сервисе WCF WCF. Трассировщик создает файлы журналов, которые вы можете использовать для просмотра встроенного средства просмотра трасс. http://msdn.microsoft.com/en-us/library/ms733025.aspx

+0

Я знаю, что знаю (см. Последний параграф). Мой вопрос был в другом. – aogan

+0

Извините, пропустил ваш комментарий. Но зачем вам нужен другой способ? – dotmad

+0

Мне просто интересно, есть ли что-то еще там. Также я обнаружил, что трассировка не так проста в использовании, особенно при наличии сообщений протокола (безопасность, надежные сообщения). – aogan

3

Один из самых простых областей потерять много времени на при разработке WCF услуг в конфигурации связывания , Резервируйте свои рабочие конфигурации религиозно, для начала, в репозитории исходного кода. Вы также можете добавить процедуру проверки для самого файла конфигурации, которая выполняется до создания службы.

Что касается отладки таких проблем WCF, то действительно нет замены старой старой Trace.WriteLine(), которая записывает в TraceListener, который сопоставляется с файлом, службой и клиентом. Но на самом деле, учитывая, что ваша проблема довольно распространена и, скорее всего, на 100% связана с конфигурацией, я бы посоветовал узнать больше о настройках привязки, особенно о тайм-аутах. Установите значения на произвольно большие числа или даже на Timeout. Неограниченное числовое значение (в виде строки), которое буквально скажет WCF, чтобы разрешить бесконечный тайм-аут. Тогда спросите себя, почему что-то будет тайминг, который не делает этого с небольшим изменением привязки.

Что касается конкретной проблемы, возможно, что сеансы не прекращаются должным образом, потому что клиентские прокси не закрываются должным образом, вызвав метод Close() явно. Возможно, вам удастся избежать этого, когда вы имеете дело с сеансовыми привязками, но сеансы не будут выпущены, если вы не закроете прокси. Побочным эффектом этого будет то, что будут достигнуты значения дросселирования по умолчанию, обычно равные 10 параллельным сеансам. После того, как вы понимаете жизненный цикл сеанса, вы можете посмотреть свойства IsInitiating, IsTerminating и IsOneWay, которые могут быть указаны для атрибутов OperationContract для методов контракта на обслуживание.

Вот несколько полезных ресурсов:

OperationContract: (странно URL, который не будет связывать)
http://en.csharp-online.net/WCF_Services -OperationContract_Attribute

Использование Сессии:
http://msdn.microsoft.com/en-us/library/ms733040.aspx

Удобный Резюме WCF, инстанцирование и надежная передача сообщений
http://www.pluralsight.com/community/blogs/aaron/archive/2006/02/27/19253.aspx

И, как уже упоминалось, Брайан, мой ответ дросселирования вопрос:
WCF Service Throttling

+0

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

+0

Итак, вы исключили проблемы сессии? Почему вы считаете, что это не связано? Увеличивает ли настройки дросселирования возможность подключения? –

0

Не забудьте назвать.Метод Close() для прокси-сервера вашего клиента.

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