Что на самом деле происходит, когда человек вызывает метод Open для IRequestChannel? Например, если у меня есть следующий код:
ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>();
// using a netTcpBinding to a net.tcp://localhost:9999/Bar
IRequestChannel outchannel = factory.CreateChannel();
outchannel.Open(); // what happens here?
if (outchannel.State == CommunicationState.Opened)
{
success = true;
}
outchannel.Close();
Кажется, я получаю «ложные срабатывания» на одних сервисах с точными сбоями на других. Я бы предположил, что всегда буду получать ложные срабатывания, если бы это каким-то образом не подтверждало, что канал открыт.
Есть предложения по улучшению? Я бы не хотел отправлять сообщение, так как это просто проверка жизнеспособности службы для диагностического теста, но я могу, если это необходимо.
Из нашего файла конфигурации я заметил, что каналы, которые возвращают ложные срабатывания, используют следующую конфигурацию поведения:
<binding name="secureNetTcpStream" maxBufferSize="2000000" maxReceivedMessageSize="2000000000" transferMode="Streamed" sendTimeout="00:05:00" receiveTimeout="14:00:00">
<readerQuotas maxStringContentLength="2000000000" maxArrayLength="2000000000" />
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
Интересно, приводит ли конфигурация потокового поведения к тому, что IRequestChannel показывает, что он открыт, даже когда хост и служба недоступны?