6

Magento 有一个 API,似乎有些人正在通过 VB.NET 使用它,但在尝试了几个小时后我无法让它工作。

我在 Magento 1.7.0.2 上尝试让 VB.NET 应用程序与 API 一起工作。我正在使用符合 WS-I 的 Web 服务设置。

错误 1 ​​自定义工具错误:无法导入 WebService/Schema。无法从命名空间“urn:Magento”导入绑定“Mage_Api_Model_Server_Wsi_HandlerBinding”。命名空间“urn:Magento”中端口类型“Mage_Api_Model_Server_Wsi_HandlerPortType”的操作“catalogProductAttributeRemove”有以下语法错误:该操作没有匹配的绑定。检查 Binding 部分中的操作、输入和输出名称是否与 PortType 部分中的相应名称匹配。d:\Documents\Visual Studio 2010\Projects\Mage\Mage\My Project\Settings.settings 1 1 法师

如果我尝试将其添加为服务参考(而不是 Web 参考),我会收到一组不同的错误。

无法导入 wsdl:binding 无法导入 wsdl:port 无法导入 wsdl:portType

错误 5 自定义工具错误:无法为服务引用“ServiceReference1”生成代码。有关详细信息,请查看其他错误和警告消息。d:\Documents\Visual Studio 2010\Projects\Mage\Mage\Service References\ServiceReference1\Reference.svcmap 1 1 Mage

警告 3 自定义工具警告:无法导入 wsdl:binding 详细信息:导入 wsdl:binding 所依赖的 wsdl:portType 时出错。wsdl:portType 的 XPath://wsdl:definitions[@targetNamespace='urn:Magento']/wsdl:portType[@name='Mage_Api_Model_Server_Wsi_HandlerPortType'] 错误源的 XPath://wsdl:definitions[@targetNamespace='urn: Magento']/wsdl:binding[@name='Mage_Api_Model_Server_Wsi_HandlerBinding'] d:\Documents\Visual Studio 2010\Projects\Mage\Mage\Service References\ServiceReference1\Reference.svcmap 1 1 Mage

警告 4 自定义工具警告:无法导入 wsdl:port 详细信息:导入 wsdl:port 所依赖的 wsdl:binding 时出错。wsdl:binding 的 XPath: //wsdl:definitions[@targetNamespace='urn:Magento']/wsdl:binding[@name='Mage_Api_Model_Server_Wsi_HandlerBinding'] 错误源的 XPath: //wsdl:definitions[@targetNamespace='urn: Magento']/wsdl:service[@name='MagentoService']/wsdl:port[@name='Mage_Api_Model_Server_Wsi_HandlerPort'] d:\Documents\Visual Studio 2010\Projects\Mage\Mage\Service References\ServiceReference1\Reference.svcmap 1 1 法师

警告 2 自定义工具警告:无法导入 wsdl:portType 详细信息:运行 WSDL 导入扩展时引发异常:System.ServiceModel.Description.XmlSerializerMessageContractImporter 错误:命名空间 urn:Magento 中名为 catalogProductAttributeRemoveRequest 的元素消息丢失。错误源的 XPath://wsdl:definitions[@targetNamespace='urn:Magento']/wsdl:portType[@name='Mage_Api_Model_Server_Wsi_HandlerPortType'] d:\Documents\Visual Studio 2010\Projects\Mage\Mage\Service References\ ServiceReference1\Reference.svcmap 1 1 法师

有人可以给我关于如何拨打电话并获得结果的非常明确的说明/代码吗?我什至无法让初始配置正确。我已经下载了一些其他人在线提供的代码,但如果不起作用——可能是因为它是针对早期版本的。

4

3 回答 3

4

终于得到了这个工作。

像往常一样添加您的网络服务(它将无法编译,但无论如何都会添加它)

打开 Magento.wsdl(或任何您的 VS 在您的 Web 参考中调用的 wsdl 文件)并完全删除对 catalogProductAttributeRemove 的调用。

 <!--wsdl:operation name="catalogProductAttributeRemove">
    <wsdl:documentation>Delete attribute</wsdl:documentation>
    <wsdl:input message="typens:catalogProductAttributeRemoveRequest" />
    <wsdl:output message="typens:catalogProductAttributeRemoveResponse" />
</wsdl:operation-->

启动 Visual Studio 命令提示符并导航到您的项目,然后是“Web 引用”

类型:wsdl /language:VB /out:Reference.vb Magento.wsdl /namespace:com.yourwebservicename.www

这将正确生成您需要继续的 reference.vb 文件。

于 2013-09-09T08:19:18.267 回答
3
Function getHTTPStream() As String
    Dim myh As HttpWebRequest = _
    HttpWebRequest.Create("http://yourmagentoweb/soap/api/?wsdl")
    myh.Timeout = 30000
    myh.UserAgent = "Test"
    Dim myR As HttpWebResponse = myh.GetResponse()
    Dim myEnc As Encoding = Encoding.GetEncoding(1252)
    Dim mySr As StreamReader = New StreamReader(myR.GetResponseStream(), myEnc)

    Return mySr.ReadToEnd()
End Function

该代码显然需要调整-我没有时间美化这些东西


来自 Abid Hussain 的链接

1. 使用 wdsl 工具,我通过调用创建了一个 .vb 源文件:

wsdl /language:VB /out:MageProxyClass.vb http:///api/v2_soap?wsdl

2.之后我使用VB命令行编辑器将源文件编译成dll。

vbc /out:MageProxyClass.dll /t:library /r:System.XML.dll,System.Web.Services.dll MageProxyClass.vb

3. 最后我能够创建在我的 MageProxyClass.dll 中定义的 MagentoService 类的实例

Private WithEvents msvc As New MagentoService() 

4. 示例:

 Public Class main
    Private WithEvents msvc As New MagentoService()
    Private ssid As String
    Private Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ListBox1.Items.Clear()
        ListBox1.Items.Add("Trying to connect")
        msvc.loginAsync("xxxx", "xxxxxxxxxxxxxxxx")
    End Sub

    Public Sub MageLoginComplete(ByVal sender As System.Object, ByVal e As loginCompletedEventArgs) Handles msvc.loginCompleted
        ListBox1.Items.Add("Login completed")
        ssid = e.Result
        ListBox1.Items.Add(String.Concat("Session ID: ", ssid))
    End Sub
End Class 
于 2012-09-02T05:44:46.313 回答
2

你可能想试试这个例子

还可以在这里找到更详细的 Magento C# 库:

于 2012-08-27T20:33:16.987 回答