ASP.NET Core 2.1でwsdl urlからC#クラスを生成します。
WSDLのURLは: https://airarabia.isaaviations.com/webservices/services/AAResWebServices?wsdl
「Microsoft WCF Webサービス参照プロバイダー」ツールを使用してC#クラスを生成すると、次のエラーが発生しました。
エラー:コードは生成されませんでした。クライアントを生成しようとした場合、メタデータドキュメントに有効なコントラクトまたはサービスが含まれていないか、すべてのコントラクト/サービスが/ referenceアセンブリに存在することが判明したことが原因である可能性があります。すべてのメタデータドキュメントをツールに渡したことを確認します。できました。
どんな解決策でもありがたいです。
短い答え
開発コマンドプロンプトを開いて実行し、プロキシクラスを生成します。
svcutil http://airarabia.isaaviations.com/webservices/services/AAResWebServices?wsdl
http
の代わりにhttps
を使用したことに注意してください。サーバーの証明書により、svcutil
で問題が発生します。クラスをプロジェクトフォルダにコピーします。
NuGetのSystem.ServiceModel.Primitives
をプロジェクトの依存関係に追加します。 ASP.NET Coreはweb.config
ファイルを使用しないため、プロキシクラスを作成するときに、自分でバインディングを作成する必要がある場合があります。例:
var binding = new BasicHttpsBinding(BasicHttpsSecurityMode.Transport);
var address = new EndpointAddress("http://airarabia.isaaviations.com/webservices/services/AAResWebServices");
var client = new AAResWebServicesClient((Binding)binding, address);
バインディングでは、暗号化されていない接続を受け入れる航空会社がないため、BasicHttpsBinding
が使用されます。 SabreにはTLS 1.2以降が必要です。
説明
航空会社とGDSは、Web相互運用性の標準に準拠しているとは言えません。それらは十分に大きいので、何か変更がある場合、それらを収容しなければならないのは旅行代理店です。 their standardを指定すると、変更する必要もなくなります。
たとえば、OTA標準とSabreの実装は、標準になっていなかったSOAPの代替案であるebXMLを使用して2003年に作成されました。その後、後のSOAP標準の一部にならないメカニズムを使用してSOAPでebXMLを使用しました。混乱を修正して相互運用性を確保するためにWS- *標準が作成されたとき、それらは気にさえしませんでした。
あなたが提供したWSDLはSabreのものに似ています。 OTA_PINGのようなOTAの操作のsomeを使用し、カスタム操作を追加します。幸い、匿名の内部型のようなツールブレーカーは含まれていません。
could 2008より前の.NETスタックを使用して、wsdl.exeを使用してASMXプロキシを作成します。私の知る限り、これは.NET Coreに移植されていません。 たぶんこれは、Windows互換機能パックの一部です。結局のところ、それはis非準拠であり、10年前に廃止されました。 ASMXも、年齢の大幅なアップグレードはありません。 I have ASXMサービスをAmadeusなどで使用する場合、過去にデシリアライザで同時実行の問題が発生します。
そして、Farelogixなど、自分のXSDを尊重しないものもあります。それらは列挙の範囲外の値を返し、「まあ、XSDは情報提供のみを目的としています」と言うかもしれません。 wsdl
ファイルは明確にマークされていますnot for production use
残念ながら一般的な解決策はありません。ここにいくつかのオプションがあります:
wsdl.exe
とASMXは問題外です。それらを使用する必要がある場合は、フルフレームワークに切り替える必要があります。[〜#〜]警告[〜#〜]
電話をかけても、プロバイダーと通信できるわけではありません。 SOAPを介したebXMLの主な問題の1つは、本文は問題ないが、認証に使用されるものを含むheadersがすべて間違っていることです。これは、認証要素を作成する必要があることを意味します
別の問題は、認証フィールドが誤用されることが多いことです。たとえば、検討する認証ヘッダーsessionトークンを使用します。 GDSは引き続きメインフレームを使用し、これらのセッショントークンは実際の端末セッションにマップされることがよくあります。
つまり、認証ヘッダーを生成するためにWCFに依存する代わりに、認証ヘッダーを手動で作成する必要があります。これは、トランザクションがステートフルであることも意味します。予約するには、その予約に使用されたセッションを追跡し、新しいトランザクションを開始する前に、以前のトランザクションがすべて完了していることを確認する必要があります。
WSDLファイルをローカルにダウンロードします。次に、次のコマンドを実行します。
_wsdl.exe /verbose /namespace:Air /out:D:\t\ar /protocol:SOAP /language:CS C:\path\to\wsdl\AAResWebServices_1.wsdl
_
名前空間を任意の名前空間に変更します。
WSDL.exeはWindows SDKの一部です。
_C:\Program Files (x86)\Microsoft SDKs\Windows
_
鉱山はC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
にありました
これにより、問題なくクラスが生成されました。このソリューションをテストしました。