繁体   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