Как вы решаете проблему с WCF? - PullRequest
2 голосов
/ 13 февраля 2009

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

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

Ответы [ 4 ]

3 голосов
/ 14 февраля 2009

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

Что касается отладки таких проблем WCF, на самом деле ничто не заменит старого доброго Trace.WriteLine (), записывающего в TraceListener, который сопоставлен с файлом, службой и клиентом. Но на самом деле, учитывая, что ваша проблема довольно распространена и, скорее всего, на 100% связана с настройками, я бы посоветовал узнать больше о настройках привязки, в частности, об истечении времени ожидания. Установите значения на произвольно большие числа или даже на Timeout.Infinite числовое значение (в виде строки), которое буквально скажет 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

1 голос
/ 13 февраля 2009

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

0 голосов
/ 03 апреля 2011

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

0 голосов
/ 13 февраля 2009

Звучит так, как будто вы попали в газ ...

Регулирование службы WCF

http://kennyw.com/indigo/150

...