【问题标题】:PHP SOAP client and SOAP server errorsPHP SOAP 客户端和 SOAP 服务器错误
【发布时间】:2010-08-09 13:07:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: php web-services soap soapserver


    【解决方案1】:

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

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

    【讨论】:

    • 哪种类型的设计最适合捕获这些异常并将问题通知用户,同时向站点管理员报告以进行调试以确定出了什么问题?
    • 我想说您可以创建自己的从 Exception 扩展的 SoapException 类,并且在构造函数中您可以将 $resp->faultstring 保存在数据库中或将其发送给站点管理员.. 和对于用户来说,try-catch 应该足以告诉他们有问题.. 我不知道这是“最好的”,但我会这样做 =)
    【解决方案2】:

    您可以调用http://server:1234/foo/bar?wsdl,如果您确实取回了 WSDL,则触发实际的 SOAP 请求。

    如果应用程序出现故障,您可能无法获得 WSDL,并且如果它只是导致它挂起的服务的一部分,那么您无论如何也无法提前检测到它。

    【讨论】:

    • 在这方面调用一些 WSDL 的最佳方式是什么? wget 浮现在脑海中,但我不确定 php 中是否有更好的方法?
    • file_get_contents() 假设您在 fopen 中允许 url。或者使用 cURL 检查标题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多