web services - reply - C#SOAP-Error al deserializar el cuerpo del mensaje de respuesta(API de Magento)
error al deserializar el cuerpo del mensaje de respuesta para la operaciĆ³n c# (3)
Estoy intentando conectar una aplicación C # a Magento 1.6 (a través de Magento SOAP V2) usando el siguiente código:
using (Mage_Api_Model_Server_Wsi_HandlerPortTypeClient proxy = new Mage_Api_Model_Server_Wsi_HandlerPortTypeClient())
{
string sessionId = proxy.login("XXXXXXX", "XXXXXXXXXXX");
Console.WriteLine(sessionId);
}
y me sale el siguiente error:
Error in deserializing body of reply message for operation ''login''.
Usé Fiddler para inspeccionar la transferencia y este es el resultado:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento">
<SOAP-ENV:Body>
<ns1:loginResponseParam>
<result>fc094df96480dbbcdXXXXXXXXXXXXXXX</result>
</ns1:loginResponseParam>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Estoy usando:
- Magento V 1.6
- Magento SOAP V2
- Conformidad WS-I (es decir, el Sistema / Configuración / Servicios / Magento Core API / WS-I Compliance se establece en Sí)
- Corrección de tipo de contenido : tipo de contenido Error al consumir Magento 1.5 Servicios web de .Net
- VS 2010
- .Net 3.5
¿Alguna idea de cómo puedo solucionar (o corregir) este problema?
No estoy familiarizado con todo el paquete de desarrollo de "Servicios web == Soap == WS- *", pero sí sé que Magento 1.6 introdujo algo llamado "Conformidad WS-I" para su API. Necesita usar la URL de jabón V2, y también configurar
System -> Configuration -> Magento Core Api -> General Settings -> WS-I Compliance
a "Sí" (en el administrador del sistema Magento). Esto le indicará a Magento que use el manejador soap_wsi
lugar del manejador soap_v2
. Puede ver el controlador que maneja las solicitudes de Jabón de Magento en
app/code/core/Mage/Api/controllers/V2/SoapController.php
No tengo idea si esto te ayudará, pero incluiste
- Conformidad WS-I
y las palabras coinciden, por lo que hay una posibilidad de que esto ayude.
esto es bastante fácil de arreglar. Abra el archivo web.config / app.config para la aplicación que está utilizando para conectarse a magento
encuentra esta linea
<client>
<endpoint address="http://YourWeb.com/index.php/api/v2_soap/index/" binding="basicHttpBinding" bindingConfiguration="BasicBinding" contract="Webstore.Mage_Api_Model_Server_Wsi_HandlerPortType" name="Mage_Api_Model_Server_Wsi_HandlerPort" />
</client>
Anote la configuración de enlace y el tipo de enlace. En el enlace básico anteriorHttpBinding / BasicBinding
A continuación, busque la siguiente sección de configuración.
<bindings>
<basicHttpBinding>
<binding name="BasicBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="999999" maxBufferPoolSize="999999" maxReceivedMessageSize="999999" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="999999" maxStringContentLength="999999" maxArrayLength="999999" maxBytesPerRead="999999" maxNameTableCharCount="999999" />
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
Observe la anidación aquí, vinculante -> tipo de enlace -> elemento de enlace por nombre
Cuando Visual Studio genera el proxy, los valores predeterminados que otorga para la cuota del lector no son lo suficientemente grandes como para contener todos los datos. Simplemente increméntelos como lo hice en el ejemplo anterior.
Intenté todas las respuestas anteriores pero no resolvió mi problema, en mi caso particular descubrí que se trataba de miembros de datos con el tipo de problema de creación de fecha y hora. Anteriormente estaba configurando Data como
2015-07-21T13: 55: 30.5962405 + 05: 30 -> No funciona
luego lo cambió a
2015-03-29T09: 30: 47 -> Trabajando
Algunos cómo la fecha no fue capaz de serializar