C#SOAP - 反序列化回复消息体时出错(Magento API)

时间:2011-11-03 14:50:41

标签: web-services magento soap

我正在尝试使用以下代码将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>

我正在使用:

我有什么想法可以修复(或调试)这个问题吗?

4 个答案:

答案 0 :(得分:22)

这实际上很容易修复。打开用于连接到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>

注意这里的嵌套,绑定 - &gt;绑定类型 - &gt;按名称绑定元素

当visual studio生成代理时,它为读者配额提供的默认值不足以容纳所有数据。只需像上面的例子中那样增加它们。

答案 1 :(得分:1)

我尝试了以上所有答案,但它没有解决我的问题,在我的特殊情况下,我发现是数据成员使用DateTime类型创建问题。 以前我将数据设置为

2015-07-21T13:55:30.5962405 + 05:30 - &gt; 不工作

然后将其更改为
2015-03-29T09:30:47 - &gt;的工作

某些日期无法序列化

答案 2 :(得分:0)

我对整个“Web Services == Soap == WS- *”开发堆栈非常不熟悉,但我知道Magento 1.6为其引入了一个名为“WS-I Compliance”的东西API。您需要使用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

不知道这对你有帮助,但你包括

  • WS-I合规性

并且单词匹配,所以有一个外部机会它会有所帮助。

答案 3 :(得分:0)

我更新了Web服务参考,它对我有用。

由于第三方服务可能会更改/更新,因此您也应该在您的环境中进行更新。

enter image description here