我正在尝试使用以下代码将 C# 应用程序连接到 Magento 1.6(通过 Magento SOAP V2):
using (Mage_Api_Model_Server_Wsi_HandlerPortTypeClient proxy = new Mage_Api_Model_Server_Wsi_HandlerPortTypeClient())
{
string sessionId = proxy.login("XXXXXXX", "XXXXXXXXXXX");
Console.WriteLine(sessionId);
}
我收到以下错误:
Error in deserializing body of reply message for operation 'login'.
我使用Fiddler检查传输,这是结果:
<?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>
我正在使用:
有什么想法可以解决(或调试)这个问题吗?
这实际上很容易解决。 打开您用于连接到 magento 的应用程序的 web.config/app.config
找到这一行
<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>
记下绑定配置和绑定类型。 在上面的 basicHttpBinding/BasicBinding
接下来找到以下配置部分。
<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>
注意这里的嵌套,绑定 -> 绑定类型 -> 按名称绑定元素
当 Visual Studio 生成代理时,它为读取器配额提供的默认值不够大,无法容纳所有数据。 只需将它们全部增加,就像我在上面的示例中所做的那样。
我尝试了上述所有答案,但它没有解决我的问题,在我的特定情况下,我发现它是具有 DateTime 类型的数据成员造成了问题。
之前我将数据设置为
2015-07-21T13:55:30.5962405+05:30 -> 不工作
然后改为
2015-03-29T09:30:47 -> 工作中
日期无法序列化的一些原因
我对整个“Web Services == Soap == WS-*”开发堆栈非常不熟悉,但我确实知道 Magento 1.6 为其 API 引入了称为“WS-I 合规性”的东西。 您需要使用 V2 Soap URL,并且还设置
System -> Configuration -> Magento Core Api -> General Settings -> WS-I Compliance
选择“是”(在 Magento 系统的管理中)。 这将告诉 Magento 使用
soap_wsi
处理程序而不是 soap_v2
处理程序。 您可以在处看到处理 Magento Soap 请求的控制器
app/code/core/Mage/Api/controllers/V2/SoapController.php
不知道这是否对你有帮助,但你包括了
并且单词相匹配,因此有可能会有所帮助。