Всем, насколько мне известно, вопрос решен в EDIT 2. Хотя это лишь частичное решение проблемы IIS проблемы, это то, что я искал.
Итак, я собираюсь добавить свой вопрос к маленькому океану вопросов по этому вопросу.
Я пытаюсь включить сжатие GZip на большие ответы на мыло из службы WCF. До сих пор я следил за инструкциями здесь и в других местах, чтобы включить динамическое сжатие в IIS. Здесь мой раздел dynamicTypes из applicationHost.config:
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="application/xop+xml" enabled="true" />
<add mimeType="application/soap+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
А также:
<urlCompression doDynamicCompression="true" doStaticCompression="true" />
Хотя я не очень понимаю, зачем это нужно.
Наброси несколько лишних типов mime на всякий случай. Я применил IClientMessageInspector для добавления Accept-Encoding: gzip, deflate для моего клиента HttpRequests. Вот пример заголовка запроса, взятого из fiddler:
POST http://[omitted]/TestMtomService/TextService.svc HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Accept-Encoding: gzip, deflate
Host: [omitted]
Content-Length: 542
Expect: 100-continue
Теперь это не работает. Просто нет сжатия, независимо от размера сообщения (до 1,5 Мб). Я просмотрел этот пост, но не столкнулся с тем исключением, которое он описывает, поэтому я не пробовал реализацию CodeProject, которую он предлагает. Также я видел много других реализаций, которые должны заставить это работать, но не могут их понять (например, msdn GZip encoder). Зачем мне нужно реализовать кодировщик или решение для кода? Не следует ли IIS следить за сжатием?
Итак, что еще мне нужно сделать, чтобы заставить это работать?
Джони
EDIT: Я думал, что привязки WCF могут стоить публикации, хотя я не уверен, что они релевантные (это от клиента):
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WsTextBinding" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false"
transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="5000000" maxReceivedMessageSize="5000000"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="5000000"
maxArrayLength="5000000" maxBytesPerRead="5000000" maxNameTableCharCount="5000000" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
<message clientCredentialType="None" negotiateServiceCredential="false"
algorithmSuite="Default" establishSecurityContext="false" />
</security>
<client>
<endpoint address="http://[omitted]/TestMtomService/TextService.svc"
binding="wsHttpBinding" bindingConfiguration="WsTextBinding" behaviorConfiguration="GzipCompressionBehavior"
contract="TestMtomModel.ICustomerService" name="WsTextEndpoint">
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="GzipCompressionBehavior">
<gzipCompression />
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="gzipCompression"
type="TestMtomModel.Behavior.GzipCompressionBehaviorExtensionElement, TestMtomModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
</binding>
</wsHttpBinding>
</bindings>
ИЗМЕНИТЬ 2: Ну, для кого-либо еще в этой таинственной ситуации, у меня есть частичное решение. I.e., я получил IIS7, по крайней мере, сжимаю мыльные сообщения от службы (хотя теперь я получаю исключение на клиенте, но для этого было опубликовано несколько решений). Проблема заключалась в том, что DynamicCompressionModule не был установлен на моем сервере. "Установка" на самом деле для меня означала просто добавление этой строки в раздел applicationHost.config:
<add name="DynamicCompressionModule" image="%windir%\System32\inetsrv\compdyn.dll" />
(Предполагая, что dll существует в этом каталоге, что в моем случае это было.) Затем добавьте модуль через раздел модулей IIS7 для веб-сайта или сервера.