Я использую ChannelFactory для открытия / управления каналами WCF (по сравнению с прокси-сервером клиента).Однако, когда возникает исключение, заводское состояние не сообщает, что канал неисправен ...
ChannelFactory<IContract> factory
= new ChannelFactory<IContract>("NetTcpBinding_IContract",
new EndpointAddress("net.tcp://localhost:8509/WCFSvc"));
try
{
IContract contrct = factory.CreateChannel();
contrct.DoWork(); //throws a non-FaultContract<ExceptionDetail>() exception
factory.Close();
}
catch (Exception)
{
CommunicationState s = factory.State; //returns CommunicationState.Opened
}
Где IContract.DoWork () выглядит так:
[FaultContract(typeof(ExceptionDetail))]
void DoWork();
Iожидал, что фабричное состояние вернуло CommunicationState.Faults в блоке catch (...).
В конце я ищу способ точно получить состояние канала при использовании ChannelFactory и ClientProxy, потому что я хочу сохранить состояние сеанса, если это возможно;и не циклично весь сеанс, если действительный FaultContact проходит через ...
Когда действительный FaultContact активирован, канал все еще действителен, и я могу продолжать использовать его, как и ожидалось.НО, когда не-FaultContract поднят, канал не может использоваться и должен быть зациклен.Однако в обоих случаях свойство .State возвращает CommunicationState.Open, поэтому нет точного способа определить, должен ли канал быть зациклен или нет ...
После того, как будет создан не FaultContract, в будущемзвонки через канал поднять «канал неисправен» ошибка даже в то время как свойство .State упорно сообщает канал находится в открытом состоянии.
Спасибо заранее за любой ввод / идеи / указатели / мысль,
Т