Если я не поймаю исключение на стороне сервера в WCF, произойдет ли сбой приложения на сервере? - PullRequest
1 голос
/ 27 ноября 2009

как заголовок, я должен поймать исключение на стороне сервера?

Ответы [ 3 ]

2 голосов
/ 27 ноября 2009

Да, вы должны - всеми силами!

Прежде всего, неперехваченные исключения на стороне сервера будут "повреждать" канал, например. Переведите канал между клиентом и сервером в «режим паники» - звонки больше не возможны, необходимо закрыть (или прервать) канал со стороны клиента и восстановить соединение.

Во-вторых, конечно, необработанное исключение приведет к сбою кода вашего сервера - однако по умолчанию ваши вызовы WCF должны быть в любом случае «на вызов», что означает, что каждый входящий запрос будет получать совершенно новый, недавно созданный экземпляр объект вашего класса сервера, и в конце вызова он будет удален в любом случае. Так что на самом деле не все так плохо ...

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

Существует несколько реализаций IErrorHandler, которые в основном позволяют динамически подключать это как поведение службы - либо в конфигурации сервера, либо в коде класса обслуживания в качестве атрибута. Посмотрите этот пост в блоге для одного из этих примеров (есть много других - просто Google для них).

2 голосов
/ 27 ноября 2009

Я хотел бы разделить исключения на следующие 2 типа, потому что я не уверен, о каких вы говорите:

Исключения WCF-связи:
Эти исключения вряд ли будут беспокоить ваше приложение на стороне сервера. Так что вам не нужно беспокоиться о них. Вам просто нужно быть осторожным в клиентском приложении.

Исключения для приложений:
(Очевидно) Вам нужно их перехватить, иначе приложение на стороне сервера будет аварийно завершено.

0 голосов
/ 27 ноября 2009

Ожидаются обычные исключения; было бы лучше выдать их за неисправности (термин WCF - ищите FaultException), но в любом случае исключение будет просто переведено на провод и обработано клиентом , Клиенты WCF действительно не любят получать исключения, и это обычно терминал для прокси (клиент должен очистить свой существующий прокси и запустить новый, чтобы получить новый сеанс и т. Д.). Но ваш серверный процесс (за исключением сеанса с прерыванием) будет продолжать работать и обслуживать запросы.

Конечно, есть категория довольно неприятных и фатальных серверных исключений - переполнение стека, нехватка памяти, прерывание потока и т. Д. Но с этими все равно мало что можно сделать !

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