2015-05-26 3 views
10

Если у меня есть привязка к сеансу, есть ли какие-либо обстоятельства, при которых будет поврежден клиент ?Есть ли способ пропустить канал WCF без сеанса?

В моем конкретном случае я следующие пользовательские привязки:

<customBinding> 
    <binding name="MyCustomBinding"> 
    <mtomMessageEncoding/> 
    <httpTransport/> 
    </binding> 
</customBinding> 

На стороне клиента я использую по умолчанию генерируется прокси, которые проистекают из ClientBase<T>.

Я ожидал, что если служба бросила необработанное исключение, которое не было FaultException, это может привести к сбою канала и вызвать также прокси-сервер клиента. Однако это не так - прокси-сервер все еще оставался в открытом состоянии и впоследствии можно было использовать. Я также попытался нарушить один из тайм-аутов Binding - это также не вызвало ошибки канала, а прокси-сервер клиента остался в состоянии Open.

Есть ли какая-либо ситуация, которая может вызвать сбой клиентского прокси?

Похожие:

ответ

-1

ClientChannel переходит в неисправное-государства, когда происходит неисправимая ошибка. В этом состоянии больше не используется. Стратегия восстановления - создать новый объект. Основные причины

  • Если метод Openне может по какой-либо причине, то объект переходит в поврежденном состоянии.
  • Если сеансовый канал обнаруживает ошибку, из-за которой он не может восстановиться, он переходит в состояние сбоя. Это может произойти, например, если есть ошибка протокола (т. Е. Он получает сообщение протокола в недопустимое время) или если удаленная конечная точка прерывает сеанс.

Взятые из CommunicationState

сессии на основе referes на сессии транспорта. Таким образом, любое необработанное исключение приведет к ошибке канала, чтобы предотвратить повторное использование прокси после исключения. Когда сеанс транспортного уровня отсутствует, клиент может продолжать использовать прокси-сервер после исключения, за исключением того, что он не должен.

Дополнительная информация о state changes.

+0

Вы знаете, как вызвать «неустранимую ошибку» с каналом без сеанса? Можете ли вы привести пример, когда метод Open завершился неудачно, и клиентский канал переходит в состояние ошибки? Также почему вы говорите: «Когда нет сеанса транспортного уровня, клиент может продолжать использовать прокси после исключения, за исключением того, что он не должен». Почему нет? –

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