我正在使用 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
构造函数失败,如果目标服务器关闭,即使我已经为它提供了一个带有 WSDL 的静态 XML 文件(与像“ http://www.destination.com/MyService?wsdl
”这样的 URL 相对)。
我相信这是因为 WSDL 包含对另一个 WSDL 的引用:
<wsdl:import namespace="http://MyCompany.Services" location="http://www.destination.com/MyService?wsdl=wsdl0"/>
这个其他 WSDL 包含调用参数的定义。
那么,我怎样才能将第二个“子 WSDL”“内联”到原来的“子 WSDL”中呢?
这是否允许我在SoapClient
不启动与目标服务器的连接的情况下创建一个?
这是我的服务定义:
[ServiceContract(Namespace = "http://MyCompany.Services")]
public interface IMyService
{
[OperationContract]
[XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Literal)]
string Foo(string myParameter);
}