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(「 」のような 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);
}
4

1 に答える 1

0

ここから単一の WSDL ファイル拡張子を使用できます: http://wcfextras.codeplex.com/

デフォルトのメタデータ エンドポイントは、リンクされたバージョンに加えて単一の WSDL ファイルも生成するため、.net4.5 を使用する場合は必要ありません。これを行うには、「?singleWSDL」を URI に追加するだけです (ソース: http://msdn.microsoft.com/en-us/library/dd456789(v=vs.110).aspx )

于 2012-07-17T10:37:10.290 に答える