我在 PHP 中通过 SOAP 使用外部 API。此 API 的正常工作流程是:
- 认证();
- 搜索任何你想要的
- session_close();
按照手册中的说明,我的小 SOAP 客户端执行此操作:
$auth_url = "http://search.isiknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl";
$auth_client = @new SoapClient($auth_url,$Options);
$auth_response = $auth_client->authenticate();
$search_url = "http://search.isiknowledge.com/esti/wokmws/ws/WokSearchLite?wsdl";
$search_client = @new SoapClient($search_url,$Options);
$search_client->__setCookie('SID',$auth_response->return);
$search_array = array(
'queryParameters' => array(
'databaseID' => 'WOS',
'userQuery' => 'TS=Medical Informatics',
'editions' => array(
array('collection' => 'WOS', 'edition' => 'SSCI'),
array('collection' => 'WOS', 'edition' => 'SCI')
),
'queryLanguage' => 'en'
),
'retrieveParameters' => array(
'count' => '99',
'fields' => array(
array('name' => 'Date', 'sort' => 'D')
),
'firstRecord' => '1'
)
);
try{
$search_response = $search_client->search($search_array);
} catch (Exception $e) {
echo $e->getMessage();
}
var_dump($search_response);
$auth_client->closeSession();
现在对于奇怪的行为:
当我加载这个小的 PHP 脚本时,它有时可以工作,有时不能。当它正常工作时,它会正确输出找到的数据,而当它没有时,我会得到类似“找不到会话:SID=I2b45baEdoaOLpOE4J8 NodeID=I2”的信息。
我注意到了几件事。总是在它一次不工作之后,下一次重新加载它将完全工作,当我每分钟重新加载脚本几次时,它会因上述消息而制动,还将“计数”参数从 99 更改为 100,这应该是最大值根据手册将始终失败并使用上述错误消息使脚本制动。这怎么可能,我能做些什么来解决这个问题?
手册仅说当没有要删除的会话时会出现此消息,因为该会话已被删除。但怎么可能呢?我的意思是我总是在脚本结束时关闭会话,有时会话在之前关闭,所以会出现错误,说明会话已经关闭?
谢谢你的帮助。