Вопрос относительно шаблонов, включающих 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?