Что такое MultiCall для PHP Soaps эквивалентно вызову .NET для Magento API v2 - PullRequest
1 голос
/ 26 августа 2011

Я с радостью подключил конечную точку к своему проекту .NET, создал классы-обертки, и все прекрасно, как у меня… (я перевел как можно больше с помощью учебников по PHP) и столкнулся с огромным узким местом, в котором я не совсем уверен, как решить .. я не могу найти приличную информацию об этом.

Так ....

В PHP я могу использовать

$calls = array( 
    array( 'catalog_product.info', 166 ), 
    array( 'catalog_product.info', 167 ), 
    array( 'catalog_product.info', 168 ), 
); 
$results = $soap->multiCall( $session_id, $calls ); 

и за один звонок я получу 3 продукта, которые сэкономят мне 70% http http.

В .NET я использую это

   Dim productReturn As MS.catalogProductReturnEntity
   Private myMagento As MS.Mage_Api_Model_Server_V2_HandlerPortType = New MS.Mage_Api_Model_Server_V2_HandlerPortTypeClient
   productReturn = myMagento.catalogProductInfo(SessionID, productId, storeView, requestAttr, Nothing)

и возвращает один элемент расширенной информации. Служба рефинансирования в .NET

Function catalogProductInfo(ByVal sessionId As String, ByVal product
As String, ByVal storeView As String, ByVal attributes As
MagentoBridge2.MS.catalogProductRequestAttributes, ByVal
productIdentifierType As String) As
MagentoBridge2.MS.catalogProductReturnEntity
Member of MagentoBridge2.MS.Mage_Api_Model_Server_V2_HandlerPortType

Не принимает массив продуктов ..

Так как в .NET использовать multiCall, который используется в PHP?

1 Ответ

2 голосов
/ 26 августа 2011

ЩЕЛКНИТЕ> Некоторые подробности здесь

Вам нужно поместить PHP-файл в корень вашего сервера magento, который выглядит примерно так

<?php
$id_start = $_GET['start'];
$id_end = $_GET['end'];

// Magento login information 
$mage_url = 'http://www.YOURSITE.co.uk/api/?wsdl=1'; 
$mage_user = 'USERNAME'; 
$mage_api_key = 'PASSWORD'; 

// Initialize the SOAP client 
$soap = new SoapClient( $mage_url ); 

// Login to Magento 
$session_id = $soap->login( $mage_user, $mage_api_key );

    $calls = array(); 
    for ($id_start; $id_start <= $id_end; $id_start++)
        {
        array_push($calls, array( 'catalog_product.info', $id_start ));
        }

    $results = $soap->multiCall( $session_id, $calls ); 

    echo json_encode($results);
?>

Right!Simples !!!!!!!!!!!!Тогда в .NET у вас есть хорошая функция, подобная этой!

Function getHTTPStream() As String
        Dim myh As HttpWebRequest = HttpWebRequest.Create("http://www.YOURSITE.co.uk/prod.php?start=20&end=80")
        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

Обратите внимание, я передаю start=20;Это идентификатор, с которого он будет начинаться, и end=80

TADAAAAAAAAAAAAAAAAAAAAAa ..

Теперь все, что вам нужно сделать в .NET - это преобразовать JSON в таблицу .. например, используя ЭТО И знаете что!Теперь я могу запросить полную расширенную информацию об элементах со скоростью примерно 100 продуктов в секунду в Visual Studio Freaking .NET! ОооооооооооооооооооооооооооооооооооооооооооооооооЗдвеинному! Прежде чем мне потребовалось 3 продукта в секунду, выполняющих отдельные вызовы в многопоточных запросах. Какое улучшение.

Спасибо за помощь телам.(Сверчки на расстоянии)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...