Расширение WCF-канала для автоматического воссоздания (/повторного подключения) самого себя в случае сбоя

У меня проблемы с NetTcpBinding и тайм-аутами. Я знаю, что это можно решить, написав блок Try-Catch для каждого вызова службы, а в случае сбоя создайте новый канал с помощью ChannelFactory и повторите тот же вызов. Единственная проблема в том, что есть буквально сотни мест, где я должен был бы провести эту уродливую меру.

Я знаю, что должно быть лучшее решение. К сожалению, наследование не в моем случае. Аспекты будут работать, но реальной поддержки в .net для них нет.

Мне было интересно, можно ли расширить WCF (модель канала?) таким образом, чтобы в случае исключения тайм-аута канал автоматически регенерировался (или он пытался повторно подключиться), и тот же вызов выполнялся снова. Все за кадром.


person Juha    schedule 13.07.2012    source источник


Ответы (1)


В одном из наших проектов мы использовали прокси-сервер, который обертывает настоящий ServiceClient и помещает try-catch вокруг вызова канала.
когда возникает исключение и канал дает сбой, мы повторно открываем соединение и снова звоним. .
мы устанавливаем порог, при котором после 3-кратного тайм-аута мы не будем снова вызывать тот же метод.

вы можете использовать DynamicProxy или Unity Interceptor для создания такого механизма.
может быть полезна эта ссылка http://kozmic.pl/2009/05/03/wcf-client-proxy-with-castle-dynamic-proxy/

person Tamir Dresher    schedule 14.07.2012
comment
Спасибо! Это даже лучше, чем то, что я искал. - person Juha; 16.07.2012