2011-03-10 210 views
13

Creé el servicio WCF y las pruebas del cliente WCF mediante una aplicación independiente. Pude ver este servicio utilizando Internet Explorer y también pude ver en las referencias del servicio de Visual Studio. Aquí está el mensaje de error.El tipo de contenido text/html; charset = UTF-8 del mensaje de respuesta no coincide con el tipo de contenido del enlace (text/xml; charset = utf-8)

"The content type text/html; charset=UTF-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8)."

Podría usted por favor consejo lo que podría estar mal?

Gracias.

Respuesta

17

Dado que el tipo de contenido devuelto es text/html, sospecho que el resultado de su llamada es un error del lado del servidor fuera de WCF (está recibiendo una página de error HTML).

Intente ver la respuesta con un proxy de depuración web como Fiddler.


(Editar basado en los comentarios):

Sobre la base de sus comentarios, veo que su WCF está alojado bajo Sharepoint 2010, en un sitio de forma autenticado.

El error que está recibiendo se debe a que su cliente WCF NO está autenticado con Sharepoint, no tiene una cookie de autenticación válida. Sharepoint luego devuelve un redireccionamiento HTTP a una página html (la página login.aspx); que no es esperado por su cliente WCF.

Para ir más lejos, deberá obtener una cookie de autenticación de Sharepoint (consulte Authentication Web Service) y pasarla a su cliente de WCF.


(edición actualizada):

error: El sitio está utilizando la autenticación basada reclamación.

Aunque esto no se debe necesariamente a las cookies o la autenticación de formulario, la explicación del mensaje de error proporcionado sigue siendo la misma. Un problema de autenticación causa una redirección a una página HTML, que no es manejada por el cliente WCF.

+0

sentimos que me llevó mucho tiempo para venir a este problema. Gracias por la respuesta. Aquí hay algunos datos de Fiddler. – nav100

+0

Aquí hay algunos encabezados de datos de Fiddler. GET /_vti_bin/psi/helloservice.svc HTTP/1.1 Content-Type: text/xml; charset = utf-8 MicrosoftSharePointTeamServices: 14.0.0.4762 Servidor: Microsoft-IIS/7.5 X-AspNet-Version: 2.0.50727 X-SharePointHealthScore: 4 – nav100

+0

@ nav100: intente ejecutar su aplicación y reproducir el error indicado con Fiddler ejecutándose. Puede que tenga que modificar los puntos finales y la configuración de su cliente WCF para que WCF se conecte a través de Fiddler. –

0

Parece que su aplicación está esperando XML, pero está recibiendo texto sin formato. ¿Qué tipo de objeto estás pasando?

2

Esto puede ser útil, compruebe las reglas de reescritura de URL en ISS 7. Este problema ocurrirá si no configuró la regla correctamente.

+0

Este fue mi problema. Estaba redireccionando las llamadas a mi servicio http wcf a la versión https. El problema (que noté en Fiddler) fue que mi llamada de servicio recibía una página html con un enlace a la URL a la que se redirigía la Reescritura de URL, recibiendo así html en lugar del XML esperado. – Dave

0

text/html es encabezado SOAP 1.1 y Content-Type: application/soap + xml es SOAP 1.2 Verifica tus enlaces y devuelve el encabezado. Debe ser el mismo ya sea 1.1 o 1.2

0

Agregue el código siguiente para el proyecto de servidor web.config

<system.serviceModel> 
<bindings> 
    <basicHttpBinding> 
    <binding name="basicHttpBinding_IService"> 
     <security mode="Transport"> 
     <transport clientCredentialType="None" proxyCredentialType="None"/> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

<services> 
    <service name="Service"> 
    <endpoint address="" name="BasicHttpBinding_IService" 
       binding="basicHttpBinding" 
       bindingConfiguration="basicHttpBinding_IService" 
       contract="IService" /> 
    </service> 

continuación, servicio web de actualización de clientes, Después de la actualización, los siguientes cambios son hecho web.config

<bindings> 
    <basicHttpBinding> 
    <binding name="BasicHttpBinding_IService"> 
     <security mode="Transport" /> 
    </binding> 
    </basicHttpBinding> 
</bindings> 


    <endpoint address="https://www.mywebsite.com/Service.svc" 
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService" 
    contract="Service.IService" name="BasicHttpBinding_IService" /> 

espero que sea útil

Cuestiones relacionadas