2009-02-18 2 views
0

Скажем, у меня есть это в реализации IInstanceProvider:Когда последний момент я могу вернуть исключение клиенту в WCF?

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

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

ответ

0

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

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

+0

Спасибо. Работает как шарм. –

0

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

Смежные вопросы