Сериализация исключений по WCF

У меня есть задача, работающая на соединении удаленной системы назад с сервером с помощью WCF. Очень возможно, что задача может выдать исключения, и я хотел бы, чтобы те исключения были направлены назад к серверу. По существу я хочу сделать что-то вроде этого:

Клиент:

server.SendException(new UnauthorizedAccessException("Some Exception"));

Сервер:

public void SendException(Exception e)
{
    throw e;
}

Контракт:

[ServiceContract]
public interface IServerContract
{
    [OperationContract]
    void SendException(Exception e);
}

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

12
задан MGSoto 18 December 2009 в 23:17
поделиться

2 ответа

Вам необходимо перехватить исключения на сервере и упаковать их в ошибки SOAP, чтобы отправить их обратно по сети. В противном случае ваш канал клиент-сервер будет "неисправен" и непригоден для использования.

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

Если оба конца канала связи действительно гарантированно являются .NET, вы можете легко обернуть любое исключение .NET в FaultException и, таким образом, легко направить обратно специфичную для .NET информацию об исключениях с помощью SOAP-совместимого «транспортного средства».

Подробнее об ошибках SOAP и способах превратите ваши .NET-исключения на сервере в ошибки SOAP на проводе здесь:

10
ответ дан 2 December 2019 в 20:17
поделиться

Для того, что мне было нужно, я решил свою проблему. Я использовал класс ExceptionDetail, предоставленный ServiceModel, и использовал его для отправки соответствующих данных исключения обратно на сервер.

6
ответ дан 2 December 2019 в 20:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: