Сериализация исключений из WCF
У меня есть задача, выполняемая на удаленной системе, соединяющей сервер с WCF. Очень возможно, что задача может генерировать исключения, и я хотел бы, чтобы эти исключения были отправлены обратно на сервер. По сути, я хочу сделать что-то вроде этого:
Клиент:
server.SendException(new UnauthorizedAccessException("Some Exception"));
Сервер:
public void SendException(Exception e)
{
throw e;
}
Contract:
[ServiceContract]
public interface IServerContract
{
[OperationContract]
void SendException(Exception e);
}
Я немного читал об исключениях ошибок, но из того, что я понимаю, они используются для определенных исключений, которые выполняются в методе, называемом WCF. Я хочу отправить любое исключение, которое приложение выбрало вне контекста WCF, а затем передать их обратно на сервер для дальнейшей обработки. Если это помогает в решении, сервер также имеет подключение к клиенту.
Ответы
Ответ 1
Вам нужно поймать исключения на сервере и упаковать их в ошибки SOAP, чтобы отправить их обратно по проводу. В противном случае ваш клиент-серверный канал будет "неисправен" и неприменим.
Ошибка SOAP - это в основном совместимый SOAP-эквивалент исключения .NET. Вы не должны бросать .NET-исключения из-за того, что они специфичны для .NET. WCF и SOA по определению являются системными-агностиками.
Если оба конца коммуникационного провода действительно гарантированно являются .NET, вы можете легко обернуть любое исключение .NET в FaultException<T>
и, таким образом, легко передать обратно специфическую исключительную информацию .NET с использованием транспортного средства, совместимого с SOAP,.
Узнайте больше о ошибках SOAP и о том, как превратить ваши исключения .NET на сервере в ошибки SOAP на провод:
Ответ 2
Для чего мне нужно, я решил свою проблему. Я использовал класс ExceptionDetail, предоставленный ServiceModel, и использовал его для отправки соответствующих данных исключений обратно на сервер.