wcf - respuesta - "tipo de contenido no soportado application soap xml charset utf 8 los soportados son text xml"
Tipo de contenido application/soap+xml; charset=utf-8 no era compatible con el servicio (13)
Aquí está el ejemplo de un web.config que resuelve el problema para mí. Preste atención en el < binding name = "TransportSecurity" messageEncoding = "Text" textEncoding = "utf-8">
Recibo el siguiente error de error al intentar agregar el servicio WCF a WCFTestClient. Revisé la cantidad de soluciones en la web pero no pude hacerlo funcionar.
¿Alguien puede ayudarme con los problemas? También estoy proporcionando mi archivo de configuración para el servicio:
Tipo de contenido application / soap + xml; charset = utf-8 no fue admitido por el servicio Los enlaces de cliente y servicio pueden no coincidir. El servidor remoto devolvió un error: (415) No se puede procesar el mensaje porque el tipo de contenido ''application / soap + xml; charset = utf-8 ''no era el tipo esperado'' text / xml; charset = utf-8
Código:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<!-- When deploying the service library project, the content of the config file
must be added to the host''s app.config file. System.Configuration does not
support config files for libraries. -->
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicHttp" allowCookies="true"
maxReceivedMessageSize="20000000"
maxBufferSize="20000000"
maxBufferPoolSize="20000000">
<readerQuotas maxDepth="32"
maxArrayLength="200000000"
maxStringContentLength="200000000"/>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="WCFTradeLibrary.TradeService">
<endpoint address="" binding="basicHttpBinding"
bindingConfiguration="basicHttp"
contract="WCFTradeLibrary.ITradeService">
</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 faul`enter code here`ts for
debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception info`enter code here`rmation -->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Como otros dijeron que sucede debido a la discrepancia del cliente del servicio.
Me encontré con el mismo problema, cuando la depuración llegó a saber que no hay coincidencia en el enlace. En lugar de WSHTTPBinding, me refería a BasicHttpBinding. En mi caso, me refiero a BasicHttp y WsHttp también. Estaba asignando dinámicamente el enlace basado en la referencia. Así que verifica tu constructor de servicio.
Compruebe su Service Constructor una vez. Verifique la imagen de abajo
En mi caso, el mismo error fue causado por la falta
[DataContract]
...
[DataMember]
atributos en el tipo de datos devuelto.
Verifique eso e intente agregar esos y ver si esto ayuda.
En mi caso, una de las clases no tenía un constructor predeterminado, y la clase sin el constructor predeterminado no se puede serializar.
Este error puede ocurrir cuando el cliente WCF
intenta enviar su mensaje utilizando la MTOM extension (MIME type application/soap+xml
se usa para transferir SOAP XML in MTOM
), pero el servicio solo puede comprender mensajes SOAP normales (no contiene MIME) partes, solo texto / tipo xml en solicitud HTTP).
Asegúrese de haber generado su código de cliente contra el WSDL
correcto.
Para usar MTOM en el lado del servidor, cambie su archivo de configuración agregando el atributo messageEncoding :
<binding name="basicHttp" allowCookies="true"
maxReceivedMessageSize="20000000"
maxBufferSize="20000000"
maxBufferPoolSize="20000000"
messageEncoding="Mtom" >
Experimenté el mismo mensaje de error. Logré arreglarlo:
En mi caso, el error fue que me perdí los atributos [datacontract] y [datamember] en la clase padre de mi clase devuelta. El mensaje de error fue engañoso.
[OperationContract]
List<MyClass> GetData();
[DataContract]
public class MyClass : MyParentClass
{
[DataMember]
public string SomeString { get; set; }
}
// Missing DataContract
public class MyParentClass
{
// Missing DataMember
public int SomeNumber { get; set; }
}
Me encuentro con el problema de nombrar. El nombre del servicio debe ser exactamente el nombre de su implementación. Si no coincide, utiliza por defecto basicHttpBinding
da basicHttpBinding
resultado text/xml
tipo de contenido text/xml
.
El nombre de su clase está en dos lugares: marcado SVC y archivo CS.
Verifique también el contrato de endpoint - nuevamente el nombre exacto de su interfaz, nada más. He agregado el nombre del ensamblaje que simplemente no puede estar allí.
<service name="MyNamespace.MyService">
<endpoint address="" binding="wsHttpBinding" contract="MyNamespace.IMyService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
Mi caso tenía una solución diferente. El cliente estaba usando basichttpsbinding [1] y el servicio estaba usando wshttpbinding.
Resolví el problema cambiando el enlace del servidor a basichttpsbinding. Además, tuve que establecer el marco de destino a 4.5 agregando:
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
[1] la comunicación superó https.
Para mí, fue muy difícil identificar el problema debido a la gran cantidad de métodos y clases involucrados.
Lo que hice fue comentar (eliminar) algunos métodos de la interfaz WebService e intentar, y luego comentar otro conjunto de métodos y probar, seguí haciendo esto hasta que encontré el método que causaba el problema.
En mi caso, estaba usando un objeto complejo que no puede ser serializado.
¡Buena suerte!
Tuve el mismo problema, lo hice funcionar por "enlace" de servicio con el comportamiento del servicio al hacer esto:
Dio un nombre al comportamiento
<serviceBehaviors> <behavior name="YourBehaviourNameHere">
Y haciendo referencia a tu comportamiento en tu servicio
<services>
<service name="WCFTradeLibrary.TradeService" behaviorConfiguration="YourBehaviourNameHere">
Todo el asunto sería:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host''s
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicHttp" allowCookies="true"
maxReceivedMessageSize="20000000"
maxBufferSize="20000000"
maxBufferPoolSize="20000000">
<readerQuotas maxDepth="32"
maxArrayLength="200000000"
maxStringContentLength="200000000"/>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="WCFTradeLibrary.TradeService" behaviourConfiguration="YourBehaviourNameHere">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttp" contract="WCFTradeLibrary.ITradeService">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="YourBehaviourNameHere">
<!-- 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 faul`enter code here`ts for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception info`enter code here`rmation -->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Tuve que agregar el parámetro? Wsdl al final de la url. Por ejemplo: http://localhost:8745/YourServiceName/?wsdl
Yo también tuve el mismo error en los registros de rastreo. Mi función recién creada en API arrojaba el mismo error, pero para mi sorpresa, las funciones anteriores funcionaban bien. El problema era: mis miembros de datos contractuales tenían pocas variables de tipo objeto. soap-xml no pudo manejarlo bien, sin embargo, puedo ver que la matriz de tipos de objetos (objeto []) se aprobaba sin problemas. Solo un tipo de objeto simple no estaba siendo analizado por el jabón. Esta podría ser una razón más por la cual los servicios arrojan el error anterior.
verifique el archivo de configuración del cliente que identificó al web.config en la sección de enlace