当前位置: 首页 > 知识库问答 >
问题:

在C#中调用Magento SOAPV2服务的问题

潘智刚
2023-03-14

我正在本地机器上使用IIS7.5和PHP5.6(测试)托管一个magento webshop。商店工作得很好,但现在我想使用visual Studio2013创建一个单独的应用程序。以下是我已经采取的步骤:

  1. 我已将域名“www.domain.com.local”添加到指向本地主机(www.domain.com.local->127.0.0.1)
  2. 的主机文件中
  3. 我在IIS上创建了一个新网站,并添加了一个新的绑定(www.domain.com.local-参见1)
  4. 我添加了带有PHP管理器的WinCache扩展,并将PHP版本设置为5.6
  5. 在magento后端中启用WS-I遵从性(系统>配置>magento Core Api)
  6. 创建SOAP角色和用户(资源访问=全部)
  7. 打开visual studio 2013并创建新的控制台应用程序
  8. 添加新的服务引用(http://www.domain.com.local/index.php/api/v2_soap/?wsdl)
  9. 尝试登录-这不正常

下面是我的一段代码:

class Program
{
    static void Main(string[] args)
    {
        MainAsync(args).Wait();
    }

    static async Task MainAsync(string[] args)
    {

        using (var proxy = new Mage_Api_Model_Server_Wsi_HandlerPortTypeClient())
        {

            try
            {
                var loginResponse = await proxy.loginAsync("soap-admin", "xxxxxxxxx"); // api key
                var sessionId = loginResponse.result;

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.ReadLine();

        }
    }
}

这就是我得到的错误:

The content type text/xml; charset=utf-8,text/xml; charset=utf-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 297 bytes of the response were: '<?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>13fa067676759c3ce8ddd61c386b6d5c</result>
</ns1:loginResponseParam>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
'.

(当我将url添加为web引用时,它的工作效果很好--旧的webservice方法)。

我读过并尝试过的相关主题(没有成功):

  1. C#SOAP-反序列化应答消息正文时出错(Magento API)
  2. C#+Magento API V2:内容类型text/xml;charset=utf-8,文本/XML;响应消息的charset=utf-8不匹配

共有1个答案

宁鹏程
2023-03-14

如果从Magento Stack Exchange的Rian那里得到了这个答案。所有学分都归Rian

解决方案:

您遇到的问题是.NET/C#在解析Magento与响应一起发送的内容类型时遇到了困难。SOAP对于以正确的格式接收正确的内容是出了名的挑剔。再加上PHP对协议相当糟糕的实现,您将从中得到很多乐趣。

51. ->clearHeaders()
52. ->setHeader('Content-Type','text/xml; charset='.$apiConfigCharset)
53. ->setBod...

请注意,Content-Type头与文本/XML匹配;charset=utf-8所需的字符集。将线路52调整为:

52. ->setHeader('Content-Type','text/xml; charset='.$apiConfigCharset, true)

告诉Magento强制覆盖该头(如果它已经设置)。

确保使用app/code/local/mage/...的完整路径复制文件,以避免覆盖核心文件。当你想升级Magento的时候你会感谢我的。

另外,请确保仔细查看,该文件中有两个setHeader()调用。

最后,还有一个WS-I兼容的SOAP适配器可用,相同的修复程序适用于该文件。您可以在app/code/core/mage/api/model/server/wsi/adapter/soap.php中找到它。

 类似资料:
  • 本文向大家介绍C# 调用 JavaWebservice服务遇到的问题汇总,包括了C# 调用 JavaWebservice服务遇到的问题汇总的使用技巧和注意事项,需要的朋友参考一下 1. A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint. 问题原因: 客户端和服务端的SOAP协议版本不一致。 解决方法: ①修改

  • 在异步HTTP SERVER中使用服务 全局方法service_center() 使用service_center($service)获取服务地址,然后使用call()方法调用公开的服务方法 $service = (yield service_center('User')); $user = (yield $service->call("User::getUser", ['id'

  • 当我调用服务时,我会得到一个错误。我尝试了所有我能找到的解决办法 错误全文:

  • 我是一名windows开发人员,对web应用程序和ASP知之甚少。我正在尝试为某人创建一个C#dll(它正在进行Web服务调用),这是从一个经典的ASP应用程序调用的。 这一切都是从一个WinForms测试应用程序开始的,该应用程序成功地加载了WSDL并调用了该web服务。现在的需求是获取测试应用程序功能,将其移动到dll,并从ASP应用程序调用该dll。我天真地将appconfig文件留在那里,

  • 问题内容: 我在我们的内部网络上有一个简单的Web服务。我使用SOAPUI进行了一些测试,从WSDL生成了服务类,并编写了一些Java代码来访问服务。正如我能够创建服务代理类和进行调用一样,一切都按预期进行。很简单的东西。唯一的障碍是让Java信任来自提供Web服务的计算机的证书。那不是技术问题,而是我缺乏基于SSL的Web服务的经验。现在到我的问题。我编写了一个简单的EJB服务并将其部署到JBo

  • 服务调用监控 KernalEvent::SERVICE_CALL事件 在框架层,调用servcie时,会抛出KernalEvent::SERVICE_CALL事件,你可以监听该事件,做数据上报处理,请以异步方式上报 <?php namespace src\Web\Listeners; use Listener; use Event; class Servic