2016-05-24 16 views
1

Ich arbeite an zwei-Wege-Gzip-Komprimierung in meiner WCF. Der Response-Teil ist mit IIS relativ einfach, aber ich kann anscheinend keine Anfrage mit SoapUI verarbeiten. Der Grund, warum ich SoapUI verwende, liegt darin, dass die Client-Anwendung, die verbunden wird, Microsoft Stack an ihrem Ende nicht verwenden wird.Wie verarbeitet man gzip aus SoapUI in WCF?

Ich habe eine Probelösung hier geschaffen, um die promlem https://github.com/janmchan/WCFCompression

In der Lösung zu demonstrieren ich einen WCFServiceDemo (WCF Server) und WCFClient (WCF Client) haben. Mit der folgenden Bindung für Client/Server habe ich kein Problem mit Anfrage/Antwort.

<bindings> 
    <customBinding> 
    <binding name="myBinding"> 
     <binaryMessageEncoding compressionFormat="GZip"/> 
     <httpTransport decompressionEnabled="True" /> 
    </binding> 
    </customBinding> 
</bindings> 

bekomme ich folgende Header mit dieser Anfrage

2016-05-23 11:37;14 : Connection: Keep-Alive 
Content-Length: 298 
Content-Type: application/soap+msbin1+gzip 
Accept-Encoding: gzip, deflate 
Expect: 100-continue 
Host: localhost:19860 

jedoch mit SoapUI mit diesen Einstellungen

enter image description here

und dieser Beispielnachricht

enter image description here

Ich bekomme die folgende Antwort, die darauf hindeutet, dass der Inhaltstyp falsch ist. Ich habe versucht, die Header hinzuzufügen, aber es scheint nicht die Lösung zu sein. Ich habe auch versucht, ein Modul hinzuzufügen, um den Filter für Gzip-Komprimierung hinzuzufügen, aber es tritt immer noch ein Fehler nach dem Beenden aller Module auf.

Wie stelle ich sicher, dass der Endclient eine Verbindung zur WCF herstellen kann, ähnlich wie SoapUI eine Verbindung herstellt?

HTTP/1.1 415 Cannot process the message because the content type 'application/soap+xml;charset=UTF-8;action="http://tempuri.org/IService1/GetData"' was not the expected type 'application/soap+msbin1+gzip' Cache-Control: private 
Server: Microsoft-IIS/10.0 
X-AspNet-Version: 4.0.30319 
X-SourceFiles: =?UTF-8?B?YzpcdXNlcnNcamNoYW5cZG9jdW1lbnRzXHZpc3VhbCBzdHVkaW8gMjAxNVxQcm9qZWN0c1xXY2ZTZXJ2aWNlRGVtb1xXY2ZTZXJ2aWNlRGVtb1xTZXJ2aWNlMS5zdmM=?= 
X-Powered-By: ASP.NET 
Date: Tue, 24 May 2016 00:04:19 GMT 
Connection: close 
Content-Length: 0 

Antwort

0

Nach über mehrere Möglichkeiten gehen, entdeckte ich, dass der beste Weg, dies zu lösen, ist eine benutzerdefinierte Message zu verwenden. Obwohl ich ein funktionierendes Beispiel habe here, habe ich immer noch ein Problem, wo einige Header fehlen, aber im Wesentlichen, wenn dies gelöst ist, sollte es die Lösung für dieses Problem sein.

Why are the soap headers missing when using Custom MessageEncoder