Domanda

Di recente ho lavorato su un'applicazione WCF e ha bisogno di alcune funzionalità per comprimere il corpo del messaggio di sapone, in modo che la dimensione della risposta dal servizio deve essere ridotto.

Dopo alcune ricerche, ho trovato un'implementazione disponibili online da 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 , di esso gli autori hanno creato un nuovo elemento vincolante 'CompressionBindingElement', associato con i suoi canali classi relative.

Questa soluzione di compressione funziona perfettamente nel mio WCF app, e la dimensione della risposta è stato ridotto di quasi il 90%, grande! Ho innanzitutto provato su HTTP binding (significa personalizzato vincolante con i mezzi http) e tutto sembra buona.

Una volta ho provato tramite vincolante (personalizzato vincolante usando trasporto TCP) net.tcp, l'app funzionava ancora bene. Tuttavia, quando ho controllato da alcuni strumenti di tracciamento, ho trovato qualcosa di strano.

Ho fatto una prova di unità chiamando 10 volte su un metodo, che ha creato il client ChannelFactory, e ha aggiunto in modo esplicito tutti gli elementi vincolanti, tra cui l'elemento di legame di compressione. Quando ho controllato il primo luogo in risposta tcptrace, sono rimasto sorpreso di vedere che tutti questi 10 messaggi sono combinate in una singola richiesta.

Così ho provato SvcTraceViewer per controllare la richiesta, e ha scoperto che la connessione socket mantiene aperta fino a quando il servizio è stato chiuso. Ho guardato dentro i progressi di elaborazione e creduto tutti i messaggi, i canali sono chiusi per ogni richiesta, ma la connessione non appena chiuso.

Il problema è accaduto solo in rete TCP vincolante con un elemento vincolante di compressione, se l'elemento non è stato aggiunto al legame o in http vincolante tutto sembra che vada bene.

Qualcuno ha provato questa soluzione e visto lo stesso problema prima? C'è qualcos'altro che posso fare per forzare la connessione a chiudere? Potrei aver perso qualcosa?

Molte grazie, Tony

È stato utile?

Soluzione

Sembra che Microsoft ha ora un articolo ufficiale sulla compressione Encoder: http://msdn.microsoft.com/en- us / library / ms751458 (v = VS.90) aspx

Ho provato più e sembra che il problema è scomparso. Non è così facile fare la mia unità di prova dopo che molti giorni:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top