0

我正在使用 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);
}
4

1 回答 1

0

您可以从此处使用单个 WSDL 文件扩展名:http ://wcfextras.codeplex.com/

请注意,使用 .net4.5 时应该不需要它,因为除了链接版本之外,默认元数据端点现在还生成单个 WSDL 文件。为此,只需将“?singleWSDL”添加到 URI(来源: http: //msdn.microsoft.com/en-us/library/dd456789 (v=vs.110).aspx )

于 2012-07-17T10:37:10.290 回答