我正在使用SoapClient將一些數據從PHP站點發送到.Net WCF服務。
這是我(簡稱爲清楚起見)代碼:WCF - 參考另一個WSDL的「不完整」WSDL
$wsdl = '/var/www/libraries/MyWsdl.xml';
$myClient = new SoapClient($wsdl);
後來,實際調用:
try {
$res = $myClient->Foo($someParameter);
}
catch(SoapFault $e){
//...
}
catch(Exception $e){
//...
}
這個偉大的工程,當一切都在網上,和錯誤處理工作,如果目標服務器正在調用Foo
。
問題是如果目標服務器關閉,那麼SoapClient
構造函數會失敗,即使我已經爲它提供了一個帶有WSDL的靜態XML文件(與URL「http://www.destination.com/MyService?wsdl
」相反)。
我相信這一切,因爲WSDL包含對另一個WSDL的引用:
<wsdl:import namespace="http://MyCompany.Services" location="http://www.destination.com/MyService?wsdl=wsdl0"/>
這等WSDL包含調用參數的定義。
那麼,我怎樣才能「內聯」原來的第二個「子WSDL」?
這是否允許我創建SoapClient
而不啓動到目標服務器的連接?
這是我的服務定義:
[ServiceContract(Namespace = "http://MyCompany.Services")]
public interface IMyService
{
[OperationContract]
[XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Literal)]
string Foo(string myParameter);
}