【问题标题】:WCF - "Incomplete" WSDL with reference to another WSDLWCF - 参考另一个 WSDL 的“不完整”WSDL
【发布时间】:2012-07-17 10:29:35
【问题描述】:

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

【问题讨论】:

    标签: php .net wcf web-services wsdl


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      相关资源
      最近更新 更多