2008-12-26 3 views
4

Что действительно происходит, когда человек звонит Открыть метод IRequestChannel? Например, если у меня есть следующий код:WCF RequestChannel; Что действительно происходит?

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(); 

я, кажется, чтобы получить «ложных срабатываний» на некоторые услуги с аккуратными аварий на других. Я бы предположил, что всегда получаю ложные срабатывания, если это никоим образом не проверяет, что канал открыт.

Любые предложения по улучшению? Я хотел бы избежать отправки сообщения, так как это просто проверка жизнеспособности службы для диагностического теста, но я могу, если это необходимо.


я заметил из нашего файла конфигурации, что каналы, которые возвращают ложные срабатывания используют следующие behaviorConfiguration:

<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 показывая он открыт даже если хост и служба недоступны?

ответ

3

Вызов функции «Открыть» действительно свяжется с сервером и откроет канал связи.

Однако могут быть ситуации, когда Open будет успешным, но вызов одного из методов службы завершится неудачно.

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

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

Основная информация: Ваш отзыв хорошо, но могут быть и другие «препятствия», которые будут мешать взаимодействию клиент-сервер. Это, вероятно, ваши ложные срабатывания ...