2010-08-09 134 views
0

我有一个Web服务器充当SOAP客户端与第三方SOAP服务器进行通信。我的客户端使用php :: soapclient在PHP中实现。PHP SOAP客户端和SOAP服务器错误

什么是验证SOAP服务器正在运行的最佳方式,以便我可以向客户端浏览器提供站点,否则如果SOAP服务器关闭或没有响应,通知用户服务当前不可用?

该系统实质上提供了通过使用SOAP客户端/服务器通信向浏览器显示数据并让用户与第三方系统交互所提供的第三方服务的混搭。

回答

2

好...一旦我用PHP肥皂服务器和PHP肥皂客户端工作。我认为,当客户端调用服务时,它通过wsdl,如果在连接(甚至是执行)服务器端出现问题,客户端的响应将是SoapFault对象.. id di类似于

$resp = $this->client->__soapCall($serviceName,$serviceParams); 
    if (get_class($resp)=="SoapFault"){ 
     throw new Exception("Webservice error - Message: ".$resp->faultstring); 
    } 
+0

什么类型的设计最适合捕捉这些异常,并将问题通知给用户,并向网站管理员报告以进行调试以确定出错的原因? – Chris 2010-08-16 12:09:07

+0

我想说你可以创建自己的SoapException类,它可以从Exception继承,并且在构造函数中可以将$ resp-> faultstring保存在数据库中,或者将它发送给站点管理员..并且为用户提供try-catch应该足以告诉他们有一个问题..我不知道这是“最好的”,但我会这样做=) – pleasedontbelong 2010-08-16 12:32:42

1

你可以调用http://server:1234/foo/bar?wsdl,如果你确实得到了WSDL,就激发实际的SOAP请求。

如果应用程序关闭,您可能无法获取WSDL,如果它只是服务的一部分而使其挂起,则无论如何您都无法事先检测它。

+0

在这方面调用某些WSDL的最佳方法是什么? wget让人想起,但我不确定在php中是否有更好的方法? – Chris 2010-08-09 13:45:01

+0

file_get_contents()假设你允许在fopen中的URL。或用cURL检查标题。 – timmy 2010-09-21 13:25:57