如何从VB.NET调用Magento API

时间:2012-08-23 09:17:49

标签: vb.net api magento

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'的portType'Mage_Api_Model_Server_Wsi_HandlerPortType'上的'catalogProductAttributeRemove'操作具有以下语法错误:该操作没有匹配的绑定。检查Binding部分中的操作,输入和输出名称是否与PortType部分中的相应名称匹配。 d:\ Documents \ Visual Studio 2010 \ Projects \ Mage \ Mage \ My Project \ Settings.settings 1 1 Mage

如果我尝试将其添加为服务引用(而不是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时出错。   XPath到wsdl:portType:// 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时出错。   XPath到wsdl:binding:// 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 Mage

     

警告2自定义工具警告:无法导入wsdl:portType   详细信息:运行WSDL导入扩展时抛出异常:System.ServiceModel.Description.XmlSerializerMessageContractImporter   错误:来自命名空间urn的名为catalogProductAttributeRemoveRequest的元素消息:缺少Magento。   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 Mage

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

3 个答案:

答案 0 :(得分:5)

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 Comand Line Editor将源文件编译成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 

答案 1 :(得分: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文件。

答案 2 :(得分:2)

您可能想尝试一下这个例子

此处还可以找到更详细的Magento C#库: