Каждый, насколько мне известно, вопрос отредактирован в 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" />
Хотя мне не очень понятно, зачем это нужно.
На всякий случай добавил несколько дополнительных типов пантомимы.
Я реализовал 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, которую он предлагает. Также я видел много других реализаций, которые должны заставить это работать, но не могут понять их (например, кодировщик mszn GZip ). Зачем мне нужно реализовывать кодировщик или решение кода-проекта? Разве 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:
Ну, для кого-то еще в этой загадочной ситуации у меня есть частичное решение. То есть, я получил IIS7, по крайней мере, для сжатия сообщений мыла от службы (хотя теперь я получаю исключение на клиенте, но для этого было опубликовано несколько решений).
Проблема заключалась в том, что DynamicCompressionModule не был установлен на моем сервере. Для меня «установить» это означало просто добавить эту строку в раздел applicationHost.config:
<add name="DynamicCompressionModule" image="%windir%\System32\inetsrv\compdyn.dll" />
(Предполагая, что dll существует в этом каталоге, что в моем случае было.)
А затем добавление модуля через раздел модулей IIS7 для веб-сайта или сервера.