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

StackOverflow https://stackoverflow.com/questions/561981

Вопрос

Допустим, у меня есть это в реализации IInstanceProvider:

public void ReleaseInstance(InstanceContext instanceContext, object instance)
{
    try
    {
        unitOfWork.Commit();
    }
    catch (Exception)
    {
        unitOfWork.Rollback();
        throw;
    }
    finally
    {
        unitOfWork.Dispose();
    }
}

Что бросать; никогда не будет возвращен клиенту, поскольку он вызывается после того, как служба выполнила свою работу и вернула данные клиенту, и, следовательно, выполняется.Как еще я могу вернуть исключение?Или есть лучшее место для этого?

Это было полезно?

Решение

Я думаю, что вы ищете не то место, чтобы сделать это.Я думаю, что лучшим выбором было бы реализовать интерфейс IDispatchMessageInspector и прикрепить его к коллекции, предоставляемой свойством MessageInspectors в DispatchRuntime (скорее всего, через поведение).

Благодаря этому вы можете проверять входящие и исходящие сообщения и при необходимости изменять их (именно так будет реализовано ваше исключение как ошибка в ответном сообщении).Из-за этого вы не просто позволите исключению всплывать, а, скорее, измените его на сообщение об ошибке и установите на него возвращаемое сообщение.

Другие советы

Я не так хорошо знаком с транзакциями в WCF, как следовало бы.Что в приведенном выше коде возвращает результаты клиенту?Это откат?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top