首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# SOAP -反序列化回复消息体中的错误(Magento )

C# SOAP -反序列化回复消息体中的错误(Magento )
EN

Stack Overflow用户
提问于 2011-11-03 14:50:41
回答 3查看 42.4K关注 0票数 13

我试图使用以下代码将C#应用程序连接到Magento1.6(通过Magento V2):

代码语言:javascript
运行
复制
using (Mage_Api_Model_Server_Wsi_HandlerPortTypeClient proxy = new Mage_Api_Model_Server_Wsi_HandlerPortTypeClient())
{
  string sessionId = proxy.login("XXXXXXX", "XXXXXXXXXXX");
  Console.WriteLine(sessionId);
}

我得到了以下错误:

代码语言:javascript
运行
复制
Error in deserializing body of reply message for operation 'login'.

我用Fiddler检查了转会,结果是:

代码语言:javascript
运行
复制
<?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 V. 1.6
  • Magento SOAP V2
  • WS遵从性(即System/Configuration/Services/Magento Core API/WS法规设置为Yes)
  • 内容类型修复:使用来自.Net的Magento1.5webservices的内容类型错误
  • VS 2010
  • .Net 3.5

有什么办法解决(或调试)这个问题吗?

EN

回答 3

Stack Overflow用户

发布于 2011-11-28 04:23:37

这其实很容易解决。打开用于连接到magento的应用程序的web.config/app.config

找到这条线

代码语言:javascript
运行
复制
<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

接下来,找到下面的配置部分。

代码语言:javascript
运行
复制
<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生成代理时,它为读取器配额等提供的默认值不足以容纳所有数据。只需增加它们,就像我在上面的例子中所做的那样。

票数 22
EN

Stack Overflow用户

发布于 2011-11-03 17:53:13

我非常不熟悉整个"Web == Soap == WS-*“开发堆栈,但我确实知道Magento1.6为其API引入了名为”WS法规“的东西。您需要使用V2 Soap,还需要设置

代码语言:javascript
运行
复制
System -> Configuration -> Magento Core Api -> General Settings -> WS-I Compliance

“是”(在Magento系统的管理中)。这将告诉Magento使用soap_wsi处理程序而不是soap_v2处理程序。您可以看到处理Magento Soap请求的控制器

代码语言:javascript
运行
复制
app/code/core/Mage/Api/controllers/V2/SoapController.php

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

  • WS法规

而且这些词是一致的,所以它有一个外部的机会,它会有帮助。

票数 1
EN

Stack Overflow用户

发布于 2020-05-29 03:37:35

我更新了Web引用,它对我有用。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7996931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档