SoapClient を使用して、PHP サイトから .Net WCF サービスにデータを送信しています。
これは私の(わかりやすくするために短縮された)コードです:
$wsdl = '/var/www/libraries/MyWsdl.xml';
$myClient = new SoapClient($wsdl);
その後、実際の呼び出し:
try {
$res = $myClient->Foo($someParameter);
}
catch(SoapFault $e){
//...
}
catch(Exception $e){
//...
}
これは、すべてがオンラインである場合にうまく機能し、宛先サーバーFoo
が呼び出されたときにダウンしている場合にエラー処理が機能します。
問題は、SoapClient
(「 」のような URL とは対照的に) WSDL を含む静的 XML ファイルを提供したにもかかわらず、宛先サーバーがダウンしている場合、コンストラクターが失敗することhttp://www.destination.com/MyService?wsdl
です。
これは、WSDL に別の WSDL への参照が含まれているために発生していると思います。
<wsdl:import namespace="http://MyCompany.Services" location="http://www.destination.com/MyService?wsdl=wsdl0"/>
この他の WSDL には、呼び出しパラメーターの定義が含まれています。
では、どうすれば元のサブ WSDL 内の 2 番目の「サブ WSDL」を「インライン化」できますか? これにより、宛先サーバーへの接続を開始せず
に を作成できますか?SoapClient
これは私のサービス定義です:
[ServiceContract(Namespace = "http://MyCompany.Services")]
public interface IMyService
{
[OperationContract]
[XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Literal)]
string Foo(string myParameter);
}