2009-09-25 7 views
3

Récemment, j'ai travaillé sur une application WCF et j'ai besoin de certaines fonctionnalités pour compresser le corps du message soap, de sorte que la taille de la réponse du service doit être réduit. Après quelques recherches, j'ai trouvé une implémentation disponible en ligne sur http://weblogs.asp.net/cibrax/archive/2006/03/29/WS_2D00_Compression-for-WCF.aspx '>http://weblogs.asp.net/cibrax/archive/2006/03/29/WS_2D00_Compression-for-WCF.aspx, les auteurs de celui-ci créé un nouvel élément de liaison 'CompressionBindingElement', associé à ses classes associées aux canaux.WCF - Connexion socket non fermée à l'aide de WS-Compression avec la liaison net.tcp

Cette solution de compression fonctionne parfaitement dans mon application WCF, et la taille de la réponse a été réduite de près de 90%, super! Je l'ai d'abord testé sur la liaison http (signifie la liaison personnalisée en utilisant le transport http) et tout semble bien. Une fois que je l'ai essayé via la liaison net.tcp (liaison personnalisée en utilisant le transport TCP), l'application fonctionnait toujours bien. Cependant, quand je l'ai vérifié par quelques outils de traçage, j'ai trouvé quelque chose d'étrange.

J'ai effectué un test unitaire en appelant 10 fois une méthode, qui a créé le client par ChannelFactory, et ajouté explicitement tous les éléments de liaison, y compris l'élément de liaison de compression. Quand j'ai d'abord vérifié la réponse dans TcpTrace, j'ai été surpris de voir que tous ces 10 messages sont combinés en une seule requête.

J'ai donc essayé SvcTraceViewer pour vérifier la requête, et j'ai trouvé que la connexion socket reste ouverte jusqu'à ce que le service soit arrêté. J'ai regardé à l'intérieur de la progression du traitement et croyais que tous les messages, les canaux sont fermés pour chaque demande, mais la connexion n'est pas fermée.

Le problème est survenu uniquement dans la liaison net tcp avec un élément de liaison de compression, si l'élément n'a pas été ajouté à la liaison ou dans la liaison http, tout semble correct.

Est-ce que quelqu'un a déjà essayé cette solution et vu le même problème auparavant? Y at-il autre chose que je puisse faire pour forcer la connexion à se fermer? Est-ce que j'ai pu manquer quelque chose?

Un grand merci, Tony

Répondre

Questions connexes