この記事は1年以上前に投稿された記事で現在は正しい情報とは限りません。

時代はRESTですがSalesforceはSOAPでメタデータとか弄ったりするんで、

作成したいモノによってはSOAPとお友達にならないといけません。

 

がしかし

「SOAPってHTTPでXMLやりとりして、仕様拡張出来たりするやつっしょ?」

「C#でWebサービス参照して追加すると勝手にクラスとか追加されて簡単に使えるやつだよね?」

程度の理解であるSOAPレベル1のスライムな私としてはお友達になるまでちょっと時間がかかりそうなので

fiddlerというHTTP通信を監視できるストーキングスーパープログラムを使って

SOAPメッセージを見てみることにしましたとさ。

 

今回はSalesforceのMetadataAPIのSOAPメッセージを見てみました。

1. fiddlerのインストール

ここからダウンロードして、インストール。

 

2. C#とか使って提供されているWSDLからスタブクラスを作成

C#の場合は以下のようにしてWebサービス参照を追加してスタブクラスを作成します。

 

2-1. ソリューションエクスプローラーの参照設定を右クリックして[サービス参照の追加]をクリック

CSharp-ref

2-2. 詳細設定をクリック

CSharp-ref2

2-3. [Web参照の追加]をクリック

CSharp-ref3

2-4. URLにWSDLファイルが置いてある場所を指定してWeb参照名を入力後、[参照の追加]をクリック

CSharp-ref4

これでWSDLからのスタブ作成は完了。

 

実際にC#で使う場合はこんな感じ(partner.wsdlもインポート済み)

 

3. スタブクラスのProxyとしてfiddlerのエンドポイントを設定

プログラムからのHTTP通信をトラッキングしたい場合はfiddlerのエンドポイントである

127.0.0.1:8888をプロキシとして利用すればOK。

 

ということで上記プログラムの例だと、MetadataService周りを以下のように変更する。

 

ちなみにブラウザからのリクエストに関しては無設定でトラッキングできちゃう。

fiddler立ち上げるとOSのインターネット接続のプロキシが自動的に127.0.0.1:8888に変更されるみたいっす。

 

4. Let’s go fiddler

fiddlerを立ち上げて、C#のスタブクラスからSOAP叩いてリクエストとレスポンスをfiddlerで見てみる。

loginはこんな感じ。

[request]

soap-login

[response]

soap-login-response

 

カスタムオブジェクトの作成はこんな感じ。

[request]

soap-createco

[response]

soap-createco-response

 

ということで、SOAPと少しだけお友達になれました。

XMLがわかっちゃえば、あとはパラメータ変えていくだけ良いので

どんな言語だろうがHTTPリクエストが出来ればSOAPなんて簡単です(多分)。

WS-*とか出てきたら各言語のライブラリに任せるしかない…。

 

この方法だとJavaやらC#やらでWSDLからスタブ作ってくれないとどうしようもないので

WSDL解読できないとダメだな~と思いつつ時代はRESTだと思うのであまり気にしていないw