Есть ли способ пропустить канал WCF без сеанса?

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

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

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

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

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

Есть ли какая-либо ситуация, которая приведет к сбою прокси-сервера клиента?

по теме:

Ответ 1

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

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

Взято из CommunicationState

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

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