SOAPはWebサービスを公開する際のプロトコルです。
RESTが主流になる前、少なくとも.NET環境ではWebサービスのプロトコルとして一般的でした。私が初めて作ったWebサービスのAPIも、VB.NETで作ったSOAPでした。
ASP.NET 2.0ではSOAPのWebサービスを作るためのサポートがあり、Visual StudioではWSDLというIF定義からIFクラスを自動生成することができたのでシステム間の連携に重宝していました。
最近はあまりシステム開発の際に名前を聞きませんが、OutSystemsには、SOAPのAPIを公開する機能も、利用する機能も備わっています。
SOAP Web Serviceを作成する
LogicタブのIntegrations>SOAPを右クリックして、Expose SOAP Web Serviceを選択します。RESTと同じく、これで作られるのはSOAP APIの入れ物ですね。
SOAP Web Serviceのプロパティは以下の通りです。
- HTTP Security:HTTPかHTTPSか。HTTPS+クライアント証明書という選択肢もあります
- Integrated Authentication:Windows統合認証を使うか否か
- Internal Access Only:設定済みのIPから来たクライアントのアクセスのみ許可するか否か
SOAP API(Web Service Method)を定義する
作成したWeb Serviceを右クリックして、Add Web Service Methodを選択するとAPIができます。
サンプルとしてEntityを入力として受取り、DBに登録して結果を返すAPIを作ってみます。
SOAPTestが適当に定義したEntityです。Text型、Integer型、DateTime型を持ってます。
作成したAPIの中身。通常のActionと同様に定義します。
ここでは、受け取ったEntityが空(全Entityが型の初期値)でないかだけをチェックして、OKならEntityに追加してます。
動作確認
ドキュメントによると、作成したSOAP Web Serviceは以下のアドレスで公開されます。
拡張子asmxはASP.NETのWeb Serviceファイルですね。
http://<hostname>/<ModuleName>/<WebServiceName>.asmx
SOAP利用はREST利用に比べて面倒なのでVisual Studioの力を借りてテストすることにします。
- Visual Studioで適当にプロジェクトを作る
- プロジェクト右クリック
- 追加、サービス参照と選択
- サービス参照で選択するときは?wsdlを末尾につけます(RESTAPITestの部分はモジュール名です。流用したのでこんな名前になってます)
- Webサービスプロキシのクラスができるので利用してみる
以下のように処理本体を書いて、無事に結果がコンソールに表示されました。
var entity = new SOAPTest() { Attribute1 = "test", Attribute2 = 123, Attribute3 = new DateTime(2019, 1, 14) }; var ws = new WebService1SoapClient(); var result = ws.WebMethod1(entity); Console.WriteLine(result); Console.Read();
EntityをView Dataで確認すると、以下のようにデータもきちんと登録されています。