Tipo de contenido text / xml; charset = utf-8 no era compatible con el servicio

Tengo un problema con un servicio WCF. Tengo una aplicación de consola y necesito consumir el servicio sin usar app.config, así que tuve que establecer el punto final, etc. por código. Tengo una referencia de servicio al svc, pero no puedo usar el app.config. Aquí está mi código:

BasicHttpBinding binding = new BasicHttpBinding(); EndpointAddress address = new EndpointAddress("http://localhost:8731/WcfServicio/MiServicio"); MiServicioClient svc = new MiServicioClient(binding, address); object ob = svc.PaisesObtener(); 

En la última línea cuando hago svc.PaisesObtener() obtengo el error:

 Content Type text/xml; charset=utf-8 was not supported by service http://localhost:8731/WcfServicio/MiServicio. The client and service bindings may be mismatched. 

El primer hit de Google dice:

esto es generalmente una falta de coincidencia en los enlaces cliente / servidor, donde la versión del mensaje en el servicio usa SOAP 1.2 (que espera application / soap + xml) y la versión en el cliente usa SOAP 1.1 (que envía texto / xml). WSHttpBinding usa SOAP 1.2, BasicHttpBinding usa SOAP 1.1.

Por lo general, parece ser un wsHttpBinding en un lado y un BásicoHttpBinding en el otro.

No olvide verificar el código relacionado con los enlaces también. Entonces si escribiste:

 BasicHttpBinding binding = new BasicHttpBinding(); 

Asegúrese de que todos sus archivos app.config contienen

  

no la

  

más o menos.

He visto este comportamiento hoy cuando el

     

faltaba en la web.config. El archivo service.svc estaba allí y se sirvió. Me tomó un tiempo darme cuenta de que el problema no estaba en la configuración vinculante en sí …

Vi este problema hoy cuando trato de crear un proxy de servicio WCF, ambos usando VS2010 y svcutil.

Todo lo que hago es con basicHttpBinding (así que no hay problemas con wsHttpBinding ).

Por primera vez en mis recuerdos, MSDN en realidad me brindó la solución, en el siguiente enlace Cómo publicar metadatos para un servicio utilizando un archivo de configuración . La línea que necesitaba cambiar estaba dentro del elemento de comportamiento dentro del elemento de comportamiento del servicio MEX dentro de mi archivo app.config de servicio. Lo cambié de

 <serviceMetadata httpGetEnabled="true"/> to <serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/> 

y al igual que la magia, el error desapareció y pude crear el proxy del servicio. Tenga en cuenta que existe una entrada de MSDN correspondiente para usar código en lugar de un archivo de configuración: Cómo: Publicar metadatos para un servicio mediante código.

(Por supuesto, Política 15: ¿cómo podría haber pasado por alto eso?)

Uno más “gotcha”: mi servicio necesita exponer 3 puntos finales diferentes, cada uno apoyando un contrato diferente. Para cada proxy que necesitaba construir, tuve que comentar los otros 2 puntos finales, de lo contrario, svcutil se quejaría de que no podía resolver la dirección URL base.

Estaba enfrentando un problema similar al usar Channel Factory. en realidad se debió a un contrato incorrecto especificado en el punto final.

Para cualquiera que aterrice aquí buscando:

tipo de contenido ‘application / json; charset = utf-8 ‘no era el tipo esperado’ text / xml; charset = utf-8

o algún subconjunto de ese error:

Se produjo un error similar en mi caso al comstackr y ejecutar un servicio sin los atributos adecuados. Recibí este mensaje de error cuando intenté actualizar la referencia del servicio en mi aplicación cliente. Se resolvió cuando apliqué correctamente los atributos [DataContract] y [DataMember] a mis clases personalizadas.

Probablemente esto sea aplicable si su servicio fue configurado y funcionando y luego se rompió después de que lo editó.

También estaba enfrentando el mismo problema recientemente. después de luchar un par de horas, finalmente salió una solución por añadidura a

 Factory="System.ServiceModel.Activation.WebServiceHostFactory" to your SVC markup file. eg ServiceHost Language="C#" Debug="true" Service="QuiznetOnline.Web.UI.WebServices.LogService" Factory="System.ServiceModel.Activation.WebServiceHostFactory" 

y ahora puedes comstackr y ejecutar tu aplicación con éxito.

De nuevo, hago hincapié en que el espacio de nombres, el nombre svc y el contrato deben especificarse correctamente en el archivo web.config:

     

Ejemplo:

    

(Etiquetas no relevantes omitidas en estas muestras)

En mi caso, tuve que especificar messageEncoding to Mtom en app.config de la aplicación cliente así:

                 

Tanto mi cliente como mi servidor usan basicHttpBinding. Espero que esto ayude a los demás 🙂