WCF, Duplex de rappel, recieveTimeout netTcpBinding

Ive a obtenu un Hôte /Client WCF Service et le client qui utilise le netTcpBinding et une méthode de rappel.

<bindings>
      <netTcpBinding>
        <binding name="tcp_Unsecured" receiveTimeout="00:01:00" sendTimeout="00:01:00">
          <security mode="None" />
          <reliableSession enabled="true" ordered="true" inactivityTimeout="00:10:00"/>
        </binding>
      </netTcpBinding>
</bindings>

Proxy

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://dotnetaddict.dotnetdevelopersjournal.com/wcf.samples", ConfigurationName="AlarmServer", CallbackContract=typeof(AlarmServerCallback), SessionMode=System.ServiceModel.SessionMode.Required)]
public interface AlarmServer
{

    [System.ServiceModel.OperationContractAttribute(IsOneWay=true, Action="http://dotnetaddict.dotnetdevelopersjournal.com/wcf.samples/AlarmServer/RegisterAlarm")]
    void RegisterAlarm(System.DateTime alarmTime, string clientName, string reminderMessage);

    [System.ServiceModel.OperationContractAttribute(IsOneWay = true, Action = "http://dotnetaddict.dotnetdevelopersjournal.com/wcf.samples/AlarmServer/unRegisterAlarm")]
    void unRegisterAlarm(string clientName);

    [System.ServiceModel.OperationContractAttribute(IsOneWay = true, Action = "http://dotnetaddict.dotnetdevelopersjournal.com/wcf.samples/AlarmServer/broadcastMessage")]
    void broadcastMessage(string msg);
}

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public interface AlarmServerCallback
{

    [System.ServiceModel.OperationContractAttribute(IsOneWay=true, Action="http://dotnetaddict.dotnetdevelopersjournal.com/wcf.samples/AlarmServer/SignalAlarm")]
    void SignalAlarm(string reminderMessage);

    [System.ServiceModel.OperationContractAttribute(IsOneWay = true, Action = "http://dotnetaddict.dotnetdevelopersjournal.com/wcf.samples/AlarmServer/displayMessage")]
    void displayMessage(string msg);
}

instance de client avec rappel

public MainForm()
{
    InitializeComponent();
    InstanceContext context = new InstanceContext(new AlarmCallback());
    client = new AlarmServerClient(context);
}

Le problème que j'ai c'est que, après la liaison recieveTimeout déclenche, le client se rend dans un état faulted et ferme les clients à l'écoute de rappel.

Je peux voir le port d'écoute déposer à l'aide de TCPVIEW de sysinternals.

Si j'ai garder le canal occupé, le temps ne se déclenche pas, donc ce n'est pas une anomalie dans la WCF message au Serveur/Client, comme plusieurs messages flux par ok.

Je pensais que le receiveTimeout a été conçu pour fournir un moyen de détecter si une réponse de la WCF message sur TCP échoué?
Pourquoi est-il défaillant de la connexion.
Il semble presque que si il n'y a pas de rappel de l'objet créé pour la période de délai d'attente, le canal est alors fermé?

Ce que je fais mal?

  • avez-vous trouvé une solution à cela?
InformationsquelleAutor PrimeTSS | 2010-05-12