2008-12-26 4 views
4

Qu'est-ce qui se passe vraiment quand une personne appelle le Open méthode de IRequestChannel? Par exemple, si je le code suivant:WCF RequestChannel; Que se passe-t-il vraiment?

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

Je semble obtenir des « faux positifs » sur certains services à des défaillances précises sur les autres. Je suppose que j'aurais toujours des faux positifs si cela ne permettait pas de vérifier que le canal était ouvert.

Une suggestion d'amélioration? Je souhaite éviter d'envoyer un message, car il ne s'agit que de tester la viabilité d'un service pour un test de diagnostic, mais je peux le faire si cela est nécessaire.


j'ai remarqué de notre fichier de configuration que les canaux qui renvoient les faux positifs utilisent la behaviorConfiguration suivante:

<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> 

Je me demande si la configuration du comportement en flux continu est ce qui conduit à la projection IRequestChannel il est ouvert même lorsque l'hôte et le service sont indisponibles?

Répondre

3

L'appel de la fonction Open entrera en effet en contact avec le serveur et ouvrira le canal de communication.

Toutefois, il peut arriver que Open réussisse mais que l'appel de l'une des méthodes du service échoue. Par exemple: Si le client appelle une méthode de service qui initie une session et que le serveur a atteint son nombre maximal de sessions, la fonction échoue lorsqu'un serveur est occupé. Vous risquez donc de ne pas créer de session même si vous avez un canal ouvert.

D'autres pannes peuvent se produire dans un service même si le canal a été ouvert avec succès.

Résumé: votre vérification est bonne mais il y a peut-être d'autres "obstacles" qui vont interférer avec la communication client-serveur. Ce sont probablement vos faux positifs ...

Questions connexes