簡體   English   中英

需要通過WSDL返回對大量數據進行排序

[英]Need to sort large amount of data via a WSDL return

我有一個復雜的問題,需要一些指導。 我們是一家非營利性組織,它可以證明世界各地的工廠是否符合道德標准。 我們擁有WSDL Web服務,該服務返回全球各國認證工廠的名稱和聯系信息。 它接受三個字母的字符串作為參數(例如,孟加拉國為BGDCHNCHN ,哥倫比亞為COL )。

我設計了一個帶有HTML選擇的頁面,以便用戶可以選擇一個國家並查看工廠列表。 我希望能夠編寫某種過濾器,僅將擁有認證工廠的國家/地區列入此列表,而將沒有認證工廠的國家/地區排除在外。

我已經編寫了以下代碼來完成此任務,但是它的運行速度非常慢,而且確實使站點陷入困境。 (為簡潔起見,我只包括了前幾個國家。完整的數組包括大約210個國家。而且, factCountByCountryID()函數返回給定國家/地區中當前的工廠數量。

<?php
ini_set("soap.wsdl_cache_enabled", "0");    
$client = new SoapClient("http://apollov-dev.worlddata.com:8080/WrapSystem/services/FactoriesWS?wsdl",array("trace" => 1,     "exceptions" => 0));

$countryList=array("AFG"=>"Afghanistan","ALA"=>"Aland Islands","ALB"=>"Albania","DZA"=>"Algeria","ASM"=>"American Samoa","AND"=>"Andorra","AGO"=>"Angola","AIA"=>"Anguilla","ATG"=>"Antigua and Barbuda","ARG"=>"Argentina","ARM"=>"Armenia","ABW"=>"Aruba","AUS"=>"Australia","AUT"=>"Austria","AZE"=>"Azerbaijan","BHS"=>"Bahamas","BHR"=>"Bahrain","BGD"=>"Bangladesh","BRB"=>"Barbados","BLR"=>"Belarus","BEL"=>"Belgium","BLZ"=>"Belize","BEN"=>"Benin","BMU"=>"Bermuda","BTN"=>"Bhutan","BOL"=>"Bolivia","BIH"=>"Bosnia and Herzegovina","BWA"=>"Botswana","BRA"=>"Brazil","VGB"=>"British Virgin Islands","BRN"=>"Brunei Darussalam","BGR"=>"Bulgaria","BFA"=>"Burkina Faso","BDI"=>"Burundi","KHM"=>"Cambodia","CMR"=>"Cameroon","CAN"=>"Canada","CPV"=>"Cape Verde","CYM"=>"Cayman Islands");


foreach($countryList as $code=>$country)
{
    $params->countryCd=$code;
    $number=$client->factCountByCountryID($params);
    $factval=$number->factCountByCountryIDReturn;
    if($factval!=0)
    {
        $countriesWithFactories["$code"]="$country";
    }
    else continue;
}



?>

如果我們假設您可以修改Web服務,那么我認為解決方案很明顯?

您將創建一個名為“ getCountriesWithFactories()”的新函數。 您可以將此服務添加到Web服務並在數據庫中運行查詢,而不是嘗試將其過濾出客戶端(在PHP中)。

該呼叫只會返回有工廠的任何國家。 編寫一個MySQL查詢(或您正在使用的任何東西)應該很容易做到這一點。

現在它變慢的原因是,您正在遍歷每個國家/地區,並在每個國家/地區進行一次HTTP調用。 因此,對於每個頁面加載,您都會對Web服務進行210次調用。

如果可以改為實現getCountriesWithFactories方法,則每個頁面加載僅調用1次。

希望有道理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM