Когда в последний момент я могу вернуть исключение клиенту в WCF? - PullRequest
0 голосов
/ 18 февраля 2009

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

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

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

Ответы [ 2 ]

0 голосов
/ 19 февраля 2009

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

0 голосов
/ 18 февраля 2009

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

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

...