2011-02-04 17 views
5

La excepción:WCF - Codificación binaria a través de HTTP cliente y el servicio tirar la unión excepción desajuste

aplicación Tipo de Contenido/jabón + msbin1 no fue apoyada por el servicio http://localhost:1500/MyService.svc. Los enlaces de cliente y servicio pueden ser no coincidentes.

La configuración del cliente:

<system.serviceModel> 
    <bindings> 

    <customBinding> 
     <binding name="NetHttpBinding" closeTimeout="00:01:00" 
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"> 
      <binaryMessageEncoding /> 
      <httpTransport allowCookies="false" bypassProxyOnLocal="false" 
         hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" 
         maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
         transferMode="Buffered" useDefaultWebProxy="true" /> 
     </binding> 
     </customBinding> 

    </bindings> 
    <client> 
     <endpoint address="http://localhost:1500/MyService.svc" 
     binding="customBinding" bindingConfiguration="NetHttpBinding" 
     contract="APP.BLL.IMyServiceContract" name="MyServiceEndpoint" /> 
    </client> 
    </system.serviceModel> 

La configuración del servidor:

<system.serviceModel> 
    <bindings> 
     <customBinding> 
     <binding name="NetHttpBinding" closeTimeout="00:01:00" 
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"> 
      <binaryMessageEncoding /> 
      <httpTransport allowCookies="false" bypassProxyOnLocal="false" 
         hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" 
         maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
         transferMode="Buffered" useDefaultWebProxy="true" /> 
     </binding> 
     </customBinding> 
    </bindings> 

    <services> 
     <service name="MyAppService"> 
     <endpoint address="" binding="customBinding" bindingConfiguration="NetHttpBinding" 
        contract="APP.BLL.IMyServiceContract"> 
     </endpoint> 
     </service> 
    </services> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="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="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 

    </system.serviceModel> 
+0

¿El servicio está alojado dentro de IIS u otra aplicación de alojamiento? –

+0

Lo he estado alojando en Visual Studio por ahora. El servidor web incorporado (nunca recuerdo su nombre). Lo implementaré en IIS cuando termine. – mbursill

+0

Tuve este mismo problema si el servidor [endpoint ** Contract **] (http://msdn.microsoft.com/en-us/library/system.servicemodel.description.serviceendpoint.contract.aspx) no coincide con el contrato real utilizado por el punto final. – SliverNinja

Respuesta

4

No puede utilizar binaryMessageEncoding y HTTP sin customBindings. Puede utilizar textMessageEncoding o mtomMessageEncoding fuera de la caja.

Ver esta publicación de blog para reference on using customBindings with HTTP transport.

<bindings> 
    <customBinding> 
     <binding name="basicHttpBinaryBinding"> 
     <binaryMessageEncoding />    
     <httpTransport /> 
     </binding> 
    </customBinding> 
</bindings> 
+3

Eso contradice lo que he estado leyendo en algunos sitios: http://jeffbarnes.net/blog/post/2007/02/22/WCF-Enable-Binary-Encoding-Over-Http.aspx ¿Tiene algún artículo? que habla de esto? – mbursill

+1

HTTP es un protocolo basado en texto. MTOM fue diseñado específicamente para agregar archivos adjuntos binarios (el antiguo protocolo DIME) a ​​HTTP. El codificador binario requiere una secuencia binaria, no una secuencia de texto. –

+0

@mbursill - Actualicé la respuesta para reflejar las capacidades probadas. Puede obtener el tipo de contenido 'application/soap + msbin1' utilizando una configuración' customBinding'. [Publicación de Jeff Barnes] (http://jeffbarnes.net/blog/post/2007/02/22/WCF-Enable-Binary-Encoding-Over-Http.aspx) es precisa. – SliverNinja

Cuestiones relacionadas