2013-10-01 3 views
2

Возможно, у меня нет очевидного, но как я могу это сделать, чтобы один метод PutMessage в моей службе WCF мог принимать как GZip'd, так и обычные запросы? Сейчас я вижу эту ошибку из моей службы:WCF-служба, принимающая сообщения GZip

Cannot process the message because the content type 'application/gzip' was not the expected type 'text/xml; charset=utf-8'. 

Я пытался добавить пользовательские связывания с binaryMessageCoding/compressionFormat = «GZip» и HttpTransport. Требуется ли для этого несколько привязок и множество конечных точек? Или несколько привязок и одна конечная точка? Одна конечная точка и одна привязка?

Я не могу изменить код отправки, так как это сторонний, к которому у меня нет доступа.

Вот мой Web.config до сих пор:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="UserNameAuthenticationBehaviour"> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <serviceCredentials> 
      <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="API.Star.XXXUsernamePasswordValidator, API" /> 
      </serviceCredentials> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="API.Star.starTransport"> 
      <security mode="TransportWithMessageCredential"> 
      <transport clientCredentialType="Basic" /> 
      <message clientCredentialType="UserName" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
     <customBinding> 
     <binding name="API.Star.starTransportGzip"> 
      <binaryMessageEncoding compressionFormat="GZip" /> 
      <httpTransport /> 
     </binding> 
     </customBinding> 
    </bindings> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    <services> 
     <service name="API.Star.StarWebService" behaviorConfiguration="UserNameAuthenticationBehaviour"> 
     <endpoint name="StarWebServiceEndpoint" address="" binding="basicHttpBinding" bindingConfiguration="API.Star.starTransport" contract="API.Star.operations" bindingNamespace="http://www.starstandards.org/webservices/2005/10/transport" /> 
     <endpoint name="StarWebServiceEndpointGzip" address="" binding="customBinding" bindingConfiguration="API.Star.starTransportGzip" contract="API.Star.operations" bindingNamespace="http://www.starstandards.org/webservices/2005/10/transport" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    </system.serviceModel> 

ответ

0

Вам не нужно делать ничего особенного для .NET 4+, когда вы размещаете свой сервис на IIS. Вам просто нужно включить HTTP-сжатие в IIS.

Отметьте раздел о Http Decompression в What's New in WCF 4 для некоторых ссылок о том, как enable HTTP compression in IIS 7.

В WCF 4.5 вы также получаете поддержку сжатия для двоичного кодировщика. Проверьте раздел Compression and the Binary Encoder

+0

Я думаю, что может быть, где я смущен. Настройки IIS, казалось, были вокруг GZip * ответов *, а не * запросов *. – MattGWagner

+0

Я убедился, что сжатие включено в IIS и включено */* в качестве включенного динамического типа, но ошибка все еще происходит. – MattGWagner

+0

Запрос генерируется клиентом, а не службой. Клиент должен создать запрос, который использует GZip. –

Смежные вопросы