Как восстановить поврежденные прокси WCF, хранящиеся в презентере / контроллере? - PullRequest
1 голос
/ 13 августа 2010

Вопрос относительно шаблонов, включающих Model-View-Presenter, IOC и WCF (хотя я думаю, что это применимо и к MVC):

Работа над крупномасштабной реализацией Windows Forms с использованием MVP (Supervising Controller)шаблон плюс IOC, где докладчикам вводят свои зависимости.Одним из распространенных типов зависимостей является клиентский прокси WCF, созданный контейнером DI с использованием ChannelFactory и сохраненный как переменная-член в презентаторе, когда экран открыт, а затем освобожден.

public class SubmissionsListPresenter: IPresenter
{
     private ISubmissionsListView view;
     private ISubmissionService submissionService; // WCF Client Proxy

     public SubmissionsListPresenter(ISubmissionsListView view, 
                                     ISubmissionService submissionService) 
     {
        this.view = view;
        this.submissionService = submissionService;
     }

Дизайн работаетотлично подходит для типичного использования, но имеет недостаток с необработанными исключениями, которые проходят через обработчик ThreadException уровня приложения.На этом этапе ссылка докладчика на прокси-сервер остается в ошибочном состоянии, и любые другие вызовы этой службы, когда это представление открыто, завершатся сбоем.

Учитывая, что в соответствии с рекомендациями WCF не следует оставлять прокси-клиенты клиентов открытыми дольше, чемнеобходимо, является ли плохой идеей когда-либо хранить ссылки на них внутри презентатора / контроллера?

Сначала я думал, что смогу перехватить исключение на высоком уровне, либо в собственном событии Faulted прокси-сервера, либо в ThreadException, но ни один из них не имеет возможности воссоздать / переназначить сам прокси.Событие Faults может прервать прокси () прокси-сервера, но не более того (поскольку отправитель выглядит как Pass-By-Value?).

Я не хочу помещать блоки перехвата CommunicationException вокруг каждого отдельного вызоваэти службы (их много!), но мне не удалось найти способ восстановить прокси-сервер без засорения кода презентатора обработкой исключений.

В качестве альтернативы я мог бы отложить запрос на ссылку на службу до тех пор, пока она не будет использована, и выдатьэто далеко после, но это удаляет концепцию МОК, которая кажется позором.

Как другие архитектуры MVP / MVC работают с прокси WCF?

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