SMART LLC

.NETアプリケーションでSOAP通信する方法

公開日:2015/07/05

まだ受注してないけど先週おもしろそうな案件の話を聞いてきた。
VB.NETでSOAPとmultipart/form-dataでデータをやり取りするプログラムを用意してほしいと!

SOAPってなんですか(∀`*ゞ)テヘッ
multipart/form-dataてなんですか(:3_ヽ)_
順に身に着けてくことにする。
まずはSOAP通信が何なのか、.NETでどう実装するのか調べたのでメモする。

SOAPとは

SOAP(e-Words)
Simple Object Access Protocolの略。
プロトコルだった。
ふむふむ、やりとりされるのはXMLで、WSDL(e-Words)なるこれまたXMLのファイルに仕様を記述するそう。
データの形はWSDLに書いて公開しとくからその通りにXMLつくってちょーだいねてことらしい。

.NETで実装する方法

Microsoft Developer Networkが簡単すぎた。
10 行でズバリ!!コメント書いてるから10行超えてるじゃねえか( ゚д゚)
利用するサービスのWSDLを読み込むと自動でクラスを生成してくれるからXMLを読む機会はない。
WSDL指定するメニューがVisual Studio 2012は「Web参照の追加」、2013は「サービス参照の追加」だった。
しかし簡単すぎる。
クラスもメソッドも勝手に用意してくれるから必要なパラメータ渡すだけ。
サーバのURLすら書いてない。
とういかURLはWSDL読んだ時にconfigファイルに記述されるから何もしない限りそこを参照するぽい。
当然この状態だとconfigファイルがないとエラーになる。
configファイルでURLを設定する仕様のプロジェクトなら問題ないけど普通はURLは動的にするでしょう。
ちなみにこの記事のWSDLは試してないので今も動くかどうかは知らない。

応用

というわけでほんのりちょっこり応用編。たまたまwww.webservicex.netなるサーバを発見したので使ってみた。

Currency Convertorでドル円相場を取得して表示するプログラム。

Imports SoapTest.ServiceReference1
Imports System.ServiceModel
Dim binding As New BasicHttpBinding
binding.Name = "Test"
Dim endpoint As New EndpointAddress("http://www.webservicex.net/CurrencyConvertor.asmx")
Dim client As New CurrencyConvertorSoapClient(binding, endpoint)
MsgBox(client.ConversionRate(Currency.USD, Currency.JPY).ToString)

ServiceReference1はWSDLから生成したクラスのデフォルトの名前空間。
<用意するもの>
1.BasicHttpBindingクラス(System.ServiceModel名前空間)のオブジェクト。名前を持たせる。きっと何でもOK。
2.EndpointAddressクラス(System.ServiceModel名前空間)のオブジェクト。サーバのURLを持たせる。今回はconfigファイルを覗いた。
3.CurrencyConvertorSoapClientクラスのオブジェクト。こいつに1と2を渡してやればconfigファイルとおさらば。
あとはクライアントが持ってるメソッドを実行すれば結果が返ってきて幸せ。(戻り値はWSDLによる)

実際にやりとりされるPOSTデータの内容はFiddlerで確認できる。

SHARE