2015-06-06 4 views
0

Я строю тест WCF Service (PersonService) в .NET 4.5, размещенный в экспресс-службе IIS 8. Я также установил динамическое сжатие в IIS. Насколько мне известно, включенное сжатие WCF 4.0 включено по умолчанию. Чтобы включить httpCompression на службу я обновленное Web.Config следующим образом:Как выполнить тест, чтобы проверить, сжат ли ответ WCF с помощью httpCompression на IIS7 +

<?xml version="1.0"?> 
<configuration> 

    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5"/> 
    </system.web> 
    <system.webServer> 
    <httpCompression> 
     <dynamicTypes> 
     <add mimeType="application/soap+xml" enabled="true"/> 
     <add mimeType="application/soap+xml; charset=utf-8" enabled="true"/> 
     <add mimeType="application/soap+xml; charset=ISO-8895-1" enabled="true"/> 
     </dynamicTypes> 
    </httpCompression> 
    <urlCompression doDynamicCompression="true" doStaticCompression="true"/> 
    </system.webServer> 
    <system.serviceModel> 
    <services> 
     <service name="PersonServiceLibirary.PersonService"> 
     <endpoint address="" binding="basicHttpBinding" contract="PersonServiceLibirary.IPersonService"> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <bindings> 
     <basicHttpBinding> 
     <binding maxBufferPoolSize="524288000" maxBufferSize="524288000" maxReceivedMessageSize="524288000"> 

     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, 
      set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/> 
      <!-- To receive exception details in faults for debugging purposes, 
      set the value below to true. Set to false before deployment 
      to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="False" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

</configuration> 

Вопрос: Я хочу, чтобы проверить, является ли сжатие на самом деле происходит или нет. Как я могу проверить, что ответ сжимается на стороне сервера перед отправкой, также он распадается на стороне клиента.

Примечание: Мое клиентское приложение также является консольным приложением .NET, которое потребляет выше службы. Оба приложения Service и клиент работают на одном компьютере.

+0

1) Используйте telnet для имитации запроса и проверьте, читаются ли ваши данные, или 2) используйте сниффер пакетов и проверьте содержимое пакета TCP. –

+0

@norbert van noblemen, как я могу это сделать? Можете ли вы указать мне какую-то статью или ресурсы. Я еще не делал – Nps

ответ

0

Я использовал Teleric Fiddler проверить, происходит ли сжатие или нет. Я пробовал следующие вещи, чтобы проверить, в какой ситуации сжатие должно работать, а где нет. И скрипач меня не разочаровал.

  1. Когда <urlCompression doDynamicCompression="false" /> не должен сжимать динамический отклик.
  2. Когда <urlCompression doDynamicCompression="true" />, он должен сжиматься в любом случае, если не установлен <httpTransport decompressEnabled="false" />. basicHttpBinding всегда отправляйте Accept-encoding="gzip,deflat" на сервер, чтобы отключить сжатие, нам нужно создать customBinding и установить выше свойство false.