SOAPを使用したWeb APIって、最近はあまり見かけないけど、まぁ、残っているところには残っていて、それを使いたかったので、dotnet core系から使うにはどうすれば良いかを調べてみた。
.NET Frameworkの頃はVisual Studioを使って、サービス参照から追加すれば簡単にできたのだが、dotnet core系でCLI環境ではそういうわけにはいかない。で、調べてみたら、svcutilを使って、WSDLからアクセス用のクラスとデータクラスを自動生成してくれるようだ。svcutilは.NET Frameworkからあったけど、dotnet core系の場合、toolとして、dotnet-svcutilが提供されている。まず、このツールをインストールしよう。
dotnet tool install dotnet-svcutil -gで、以下のようにして、WSDLからアクセス用とデータ用のクラスを生成する。
dotnet svcutil <WSDLのURL>オプションを何も指定しないと、実行したフォルダの下にServiceReferenceと言うフォルダが作成され、namespace ServiceReference中にアクセス用のクラスとデータクラスが作成される。オプション指定でフォルダ名やnamespaceの指定も可能。
プログラムから、サービスにアクセスするためには、プロジェクトに下記のパッケージを追加する必要がある。
- System.ServiceModel.Primitives
- System.ServiceModel.Http
プログラム中からSOAPサービスに接続するには、以下のようにサービスアクセス用のインスタンスを作成してメソッドを呼び出す。(認証等を使用しなければならない場合はbindingや認証設定などが必要)
using System.ServiceModel;
using ServiceReference; // svcutilでnamespaceを指定した場合はそのnamespace
・・・
// サービスアクセス用インスタンスの作成
var cli = new <サービス名>Client();
// サービスのメソッドを呼び出す
var result = await cli.<メソッド名>Async(<パラメータ>);
例
using System.ServiceModel;
using ServiceReference; // svcutilでnamespaceを指定した場合はそのnamespace
・・・
// GetUserService SOAPクライアント
// ※認証なし
var cli = new GetUserServiceClient();
// ユーザー番号00001番のユーザーを取得
// ※Userクラス定義はWSDLから自動的に生成される
User ret = await cli.GetUserAsync("00001");以上、忘れないようにメモ。



Users Today : 0
Users Yesterday : 47
Users Last 7 days : 276
Users Last 30 days : 901
Users This Month : 573
Users This Year : 5687
Total Users : 100202
Views Today :
Views Yesterday : 51
Views Last 7 days : 321
Views Last 30 days : 1059
Views This Month : 657
Views This Year : 6821
Total views : 139267
Who's Online : 0