Когда в последний раз я смогу вернуть исключение клиенту в WCF?
-
05-09-2019 - |
Вопрос
Допустим, у меня есть это в реализации IInstanceProvider:
public void ReleaseInstance(InstanceContext instanceContext, object instance)
{
try
{
unitOfWork.Commit();
}
catch (Exception)
{
unitOfWork.Rollback();
throw;
}
finally
{
unitOfWork.Dispose();
}
}
Что бросать; никогда не будет возвращен клиенту, поскольку он вызывается после того, как служба выполнила свою работу и вернула данные клиенту, и, следовательно, выполняется.Как еще я могу вернуть исключение?Или есть лучшее место для этого?
Решение
Я думаю, что вы ищете не то место, чтобы сделать это.Я думаю, что лучшим выбором было бы реализовать интерфейс IDispatchMessageInspector и прикрепить его к коллекции, предоставляемой свойством MessageInspectors в DispatchRuntime (скорее всего, через поведение).
Благодаря этому вы можете проверять входящие и исходящие сообщения и при необходимости изменять их (именно так будет реализовано ваше исключение как ошибка в ответном сообщении).Из-за этого вы не просто позволите исключению всплывать, а, скорее, измените его на сообщение об ошибке и установите на него возвращаемое сообщение.
Другие советы
Я не так хорошо знаком с транзакциями в WCF, как следовало бы.Что в приведенном выше коде возвращает результаты клиенту?Это откат?