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 : 53
Users Yesterday : 65
Users Last 7 days : 340
Users Last 30 days : 1390
Users This Month : 1341
Users This Year : 1341
Total Users : 95856
Views Today : 59
Views Yesterday : 76
Views Last 7 days : 418
Views Last 30 days : 1596
Views This Month : 1544
Views This Year : 1544
Total views : 133990
Who's Online : 1