2012-08-23 21 views
5

Magento tiene una API y parece que algunas personas la están utilizando a través de VB.NET pero no puedo hacer que funcione después de intentar durante muchas horas.Cómo llamar a la API de Magento desde VB.NET

Estoy en Magento 1.7.0.2 Intentando que una aplicación VB.NET funcione con la API. Estoy usando la configuración del servicio web compatible con WS-I.

Error 1 Custom tool error: Unable to import WebService/Schema. Unable to import binding ‘Mage_Api_Model_Server_Wsi_HandlerBinding’ from namespace ‘urn:Magento’. The operation ‘catalogProductAttributeRemove’ on portType ‘Mage_Api_Model_Server_Wsi_HandlerPortType’ from namespace ‘urn:Magento’ had the following syntax error: The operation has no matching binding. Check if the operation, input and output names in the Binding section match with the corresponding names in the PortType section. d:\Documents\Visual Studio 2010\Projects\Mage\Mage\My Project\Settings.settings 1 1 Mage

si trato de agregarlo como una referencia de servicio (en lugar de una referencia web) me sale un conjunto diferente de errores.

no puede importar WSDL: unión no puede importar WSDL: puerto No se puede importar WSDL: portType

Error 5 Custom tool error: Failed to generate code for the service reference ‘ServiceReference1’. Please check other error and warning messages for details. d:\Documents\Visual Studio 2010\Projects\Mage\Mage\Service References\ServiceReference1\Reference.svcmap 1 1 Mage

Warning 3 Custom tool warning: Cannot import wsdl:binding Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on. XPath to wsdl:portType: //wsdl:definitions[@targetNamespace=’urn:Magento’]/wsdl:portType[@name=’Mage_Api_Model_Server_Wsi_HandlerPortType’] XPath to Error Source: //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

Warning 4 Custom tool warning: Cannot import wsdl:port Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on. XPath to wsdl:binding: //wsdl:definitions[@targetNamespace=’urn:Magento’]/wsdl:binding[@name=’Mage_Api_Model_Server_Wsi_HandlerBinding’] XPath to Error Source: //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

Warning 2 Custom tool warning: Cannot import wsdl:portType Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter Error: Element message named catalogProductAttributeRemoveRequest from namespace urn:Magento is missing. XPath to Error Source: //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

alguien puede darme muy explícita instrucción/código de como hacer una llamada y obtener un resultado? Ni siquiera puedo parecer que la configuración inicial sea correcta. He descargado un código que otros han proporcionado en línea, pero si no funciona, probablemente porque era para una versión anterior.

+3

¿Puedes ver el servicio web en el navegador? – Kiddo

+4

sí, tengo un sitio de prueba aquí: http://testshop.tokyorealtime.com/api/v2_soap?wsdl=1 Creo que algo podría estar mal con el API XML, o algo incompatible con .NET, sin embargo, parece que otras personas han logrado hacerlo funcionar. –

Respuesta

4
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 

Ese código necesita un retoque obviamente- no tengo tiempo para embellecer estas cosas


de enlace de Abid Hussain

1. Usando la herramienta WDSL he creado un archivo de origen .vb llamando a:

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

2. Después me utilizaron el Comand Editor de línea VB para compilar el SourceFile en una DLL.

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

3. Finalmente I fue capaz de crear una instancia de clase MagentoService definido en mi MageProxyClass.dll

Private WithEvents msvc As New MagentoService() 

4. Ejemplo:

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 
+3

tenía estas instrucciones antes de publicarlas, pero no funcionaron. No debería ser necesario compilar el código en una DLL de todos modos, simplemente acceda a él en un proyecto VB.NET de todos modos. ¿De verdad lo hiciste funcionar? Voy a crear una nueva recompensa porque aunque stackoverflow automáticamente le otorgó los puntos, mi problema permanece sin solución. –

+1

parece estar funcionando ahora que actualicé a VB 2013 –

3

Finalmente tengo esto funcionando.

Haz tu servicio web como de costumbre (no será capaz de compilar además de añadir que de todos modos)

abierto Magento.wsdl (o lo que su VS haya llamado el archivo wsdl en su referencia web) y elimine completamente la llamada a catalogProductAttributeRemove.

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

fuego hasta el Visual Studio del sistema y vaya a su proyecto, a continuación, las "Referencias Web"

Tipo: WSDL/idioma: VB /out:Reference.vb Magento.wsdl/espacio de nombres: com.yourwebservicename.www

Esto generará correctamente el archivo reference.vb que necesita continuar.

Cuestiones relacionadas