C# と WSDL のプロキシ コードで SOAP サービスを利用する
[!NOTE]
この記事では .NET WCF クライアントライブラリ について記述しています。Microsoft Docs によると、サーバーサイドの WCF サービスの実装は .NET 5 に含まれなくなる とのことです
SOAP サービスを C# の コンソールアプリケーション で利用する手順です。OS は Windows,フレームワークは .NET Framework 4.8,IDE は Visual Studio 2019 を使用します。
タイトルのとおり、サービス エンドポイント側の構築ではなく、クライアント側からサービスを利用することに視点を置いています。また、ゼロからコードを組み込むわけではなく、WCF Web Service Reference ツールを利用して「WCF クライアント プロキシ コード」と呼ばれるクラス ファイルをつくって、Web サービスのアクセスに利用します
1. Postman で Web サービスを確認する
サービスプロキシの生成に必要になる URL とメタデータを Postman で確認しておきます。URL とメタデータはプロキシ コードを生成する場面で必要になります。WSDL 1.1 に準拠してサービスが記述されている場合、その内容から Web サービスで扱える操作とデータを窺うことができます
WSDL の要素 | 内容 |
---|---|
Types | Web サービスで使えるデータ型 |
Message | 各操作(オペレーション)で通信できるデータ |
Port Type/Operation | エンドポイントがサポートする操作(オペレーション) |
Binding | Port Type ごとのプロトコルとデータ形式 |
DISCO に対応しているシステムの場合、Web サービスのエンド ポイントを一覧で調べる機能を備えていることがあります。 Dynamics NAV の場合は https://{HOSTNAME}:7047/{INSTANCE_NAME}/WS/services
という URL から使用可能な Web サービスを探索できます(詳しいことは不明ですが DISCO 自体はかなり古そうな仕様です・・)
<discovery xmlns="http://schemas.xmlsoap.org/disco/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<contractRef ref="https://localhost:7047/DynamicsNAV100/WS/SystemService" xmlns="http://schemas.xmlsoap.org/disco/scl/"/>
<contractRef ref="https://localhost:7047/DynamicsNAV100/WS/Page/ItemList" xmlns="http://schemas.xmlsoap.org/disco/scl/"/>
<contractRef ref="https://localhost:7047/DynamicsNAV100/WS/Page/powerbifinance" xmlns="http://schemas.xmlsoap.org/disco/scl/"/>
<contractRef ref="https://localhost:7047/DynamicsNAV100/WS/Page/SalesOrder" xmlns="http://schemas.xmlsoap.org/disco/scl/"/>
</discovery>
2. WCF クライアント プロキシ コードを作成する
.NET Framework に含まれる機能を利用して WCF クライアント プロキシ コード (以下、プロキシ コード)を生成します。これは SOAP で使用されるメッセージのデータ型が定義された C# 等のクラス ファイルであり、このプロキシ コードを利用することで Web サービスを呼び出すためのコーディングの手間を大幅に省略することができます。
プロキシ コードを生成する方法はいくつかあり、Visual Studio や WSDL.exe を使う方法があります。Microsoft Docs では Visual Studio の説明の方が新しいようなので、理由がなければ Visual Studio を使う方が良いようです。
- Visual Studio WCF (Windows Communication Foundation) Web Service Reference Provider
- WSDL.exe (Web Services Description Language Utility)
Visual Studio WCF Web Service Reference を使用する方法
Visual Studio を使用する方法は Microsoft Docs に詳しい説明が既にあります。Visual Studio の GUI に URL または WSDL ファイルのパスを入力するだけで Reference.cs という名前のプロキシ コードが生成されます。メイン ルーチン中にある処理等から生成されたプロキシ コードを参照して使用します。
参考リンク
- Microsoft Docs - Use the WCF Web Service Reference Provider Tool
- Microsoft Docs - How to: Add, update, or remove a WCF data service reference
WSDL.exe を使用する方法
.NET Framework SDK に含まれる WSDL.exe を使用します。WSDL.exe がある場所は、SDK のバージョンによって異なりますが、Windows 10,.NET Framework 4.8 であれば %PROGRAMFILES(X86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools にあります。オプションの /language
で CS,VB 等を指定することができます。
オプション | 説明 |
---|---|
/language:<言語> | 生成されるプロキシ クラスに使用する言語です。CS,VB,JS,VJS,CPP から選択できます。既定は CS (CSharp) です。 短い形式は /l: です。 |
/out:<ファイル名またはディレクトリ パス> | 生成されたプロキシ コードのファイル名またはディレクトリ パスです。既定のファイル名は サービス名から派生しています。短い形式は /o: です。 |
例えば ItemCard.wsdl から ItemCard_Service.cs を生成する場合は次のように WSDL.exe を実行します。
>"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\wsdl.exe" ^
More? .\ItemCard.wsdl
Microsoft(R) Web Services Description Language Utility
[Microsoft (R) .NET Framework, Version 4.8.3928.0]
Copyright (C) Microsoft Corporation. All rights reserved.
ファイル 'ItemCard_Service.cs' に書き込んでいます。
参考リンク
Author And Source
この問題について(C# と WSDL のプロキシ コードで SOAP サービスを利用する), 我々は、より多くの情報をここで見つけました https://qiita.com/momoto/items/e8c5586e1f85f3e107c2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .