Comment définir keep alive interval pour une connexion HTTP dans WCF

le canal de transport Http de la WCF utilise des connexions HTTP persistantes par défaut. Comment contrôler garder en vie timeout pour ces connexions? La valeur par défaut est 100s. J'ai trouvé cette valeur en surveillant l'application dans Procmon. Je n'ai trouvé aucun paramètre dans l'élément de liaison de transport http qui configure cette temporisation. Y a-t-il une classe .NET qui peut contrôler ce temps mort?

16
demandé sur Ladislav Mrnka 2010-08-12 13:55:47

6 réponses

jetez un coup d'oeil ici:

http://web.archive.org/web/20080721055556/http://blog.magenic.com/blogs/jons/archive/2007/05/04/The-Tao-of-Microsoft-WCF-CustomBinding-Configuration-Elements.aspx

il y a une discussion détaillée sur la manipulation de la propriété keep alive lors d'une connexion http.

7
répondu NakedBrunch 2013-04-23 17:41:46

il me semble que vous voulez ajuster le Keep-Alive en-tête HTTP. Vous devriez lire cet article sur HTTP keep-alive et d'abord déterminer si c'est vraiment quelque chose qui vaut votre temps.

Si c'est le cas, essayez de créer un Message D'Inspecteur. Cela devrait vous permettre de modifier les en-têtes HTTP pour chaque message envoyé:

public class KeepAliveMessageInspector : IClientMessageInspector
{
    // ...

    public object BeforeSendRequest(
        ref System.ServiceModel.Channels.Message request,
        System.ServiceModel.IClientChannel channel)
    {
        // Add/modify the Keep-Alive header
        var httpRequestMessage = new HttpRequestMessageProperty();
        httpRequestMessage.Headers.Add("Keep-Alive", "9000");
        request.Properties.Add(
            HttpRequestMessageProperty.Name, httpRequestMessage);
        return null;
    }

    // ...
}
1
répondu Jacob 2013-04-23 17:43:29

j'ai trouvé la solution pour cela. Le problème est que le http du noyau sous-jacent.sys a son propre temps mort et il va briser la connexion.

http://mmmreddy.wordpress.com/2013/07/11/wcf-use-of-http-transport-sharing-persistent-tcp-sessions/

netsh http add timeout timeouttype=idleconnectiontimeout value=120

aussi, cette question Est Semblable à celle-ci quelle durée de 130 secondes killig est mon appel pour le service de streaming de la WCF?

1
répondu Luiz Felipe 2017-05-23 12:15:41

Paramètre ServicePoint.MaxIdleTime devrait vous permettre de changer le délai d'inactivité par défaut de 100 secondes sur les connexions HTTP persistantes.

https://www.visualbasicplanet.info/windows-communication/configuring-http-connections.html

1
répondu WenningQiu 2018-05-08 14:03:16

cette réponse, et ce que je peux lire ici, on dirait que vous voulez créer une liaison http personnalisée, et définir le inactivityTimeout l'attribut.