2014-01-25 2 views
0

Возможно ли, в рамках метода службы WCF, уловить ошибку канала клиента? В настоящее время, я только в состоянии поймать ошибки канала через:Улавливание ошибок канала в методах обслуживания?

OperationContext.Current.Channel.Faulted += new EventHandler(Channel_Faulted); 

Однако я хотел бы метод обслуживания, чтобы быть прерван (т.е. сгенерирует исключение), если ответ не может быть доставлен клиенту. В настоящее время моя служба продолжает отправлять ответ клиенту, не бросая ничего, хотя канал неисправен (в соответствии с событием Faulted).

Дополнительное примечание: Я использую надежные сеансы с netTcpBinding, но все же, когда служба отправляет ответ и нет клиента, я не получаю исключение.

ответ

0

Почему вы хотите, чтобы ваша служба выдавала исключение, когда нет клиента?

WCF - это, по сути, система обмена сообщениями, как и наша почтовая система. Если вы, как клиент, пришлите мне письмо, я (служба) ответит на ваш адрес. Я просто предполагаю, что вы все еще живете там, и что вы будете еще живы, чтобы прочитать мой ответ.

Даже если я вижу на вечерних новостях, что вы попали под грузовик (будем надеяться, что нет ;-)), пока я пишу свой ответ. Зачем мне кричать «эй, я не могу отправить свой ответ этому парню!»? Мне некому было бы слушать. И вам все равно ...

Надежные сеансы просто добавляют дополнительный шаг подтверждения между ними. Вы пришлите мне письмо, я отвечаю: «Я получил ваше письмо, я отвечу ему позже». Если вы не получите ответ, вы просто отправте свое оригинальное письмо, и я заметлю, что вы отправите мне то же письмо. Поэтому я снова отвечу. Такая же история для ответа. Если я не получу сообщение «Я получил ваш ответ», я постараюсь ответить снова, и снова, и снова. Пока я, наконец, не сдаюсь ... потому, что я смотрел вечерние новости, или мне надоело писать то же письмо. Но конечный результат тот же. Мне еще никто не кричать, потому что вы больше меня не слушаете ...

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