2010-08-09 169 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