6

Magento には API があり、VB.NET 経由で使用している人もいるようですが、何時間も試しても動作しません。

私は Magento 1.7.0.2 を使用しています。API で動作する VB.NET アプリを取得しようとしています。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 のインポート中にエラーが発生しました。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

最後にこれが機能しました。

通常どおり Web サービスを追加します (コンパイルに失敗しますが、とにかく追加します)。

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

そのコードは明らかに微調整する必要があります-私はこれをきれいにする時間がありません


アビッド・フセインのリンクから

1. wdsl ツールを使用して、次のように呼び出して .vb ソース ファイルを作成しました。

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

2. その後、VB コマンド ライン エディタを使用して、ソースファイルを dll にコンパイルしました。

vbc /out:MageProxyClass.dll /t:ライブラリ /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 に答える