soap 超时处理

class SoapClientX extends SoapClient {
	private $timeout;
	function __construct($wdsl, $options = array()) {
		// 考虑到不和原函数冲突.
		if (isset ( $options ['timeout'] )) {
			$this->timeout = intval ( $options ['timeout'] );
		} else {
			$this->timeout = 10;
		}
		parent::__construct ( $wdsl, $options );
	}
	public function __doRequest($request, $location, $action, $version, $one_way = false) {
		ini_set ( 'default_socket_timeout', $this->timeout );
		try {
			// 当超时返回空时,表示非正常报文返回,出现"Error Fetching http headers"异常
			$response = parent::__doRequest ( $request, $location, $action, $version, $one_way );
		} catch ( Exception $e ) {
			if (stristr ( $e->getMessage (), "Error Fetching http headers" )) {
				throw new SoapFault ( 'timeout', "请求超时" );
			}
		}
		if (! $response) {
			throw new SoapFault ( 'timeout', "请求超时" );
		}
		return ($response);
	}
}

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注