先週iPhoneからExchange Web Serviceを叩くアプリケーションを作成したくて、そのやり方を調べていました。このあたり今までほとんど勉強したことがなくよくわからないことが多かったので学んだことをメモしておきます。正直なところあまり正確で無いとおもいますし、間違いがある気がしますので、そのあたりツッコミいただけると嬉しいです。
そもそも、プログラムからWebサービスを叩く方法
私の今までの認識は「Webサービス=WebサーバーにHTTPでXMLを渡すと、XMLで答えが返ってくる」程度の認識でした。これ自体はまぁ(かなり語弊があるものの)別に間違いではないと今でも思うのですが、「じゃぁ具体的にどうやってそれをプログラムするのか?」ということはわかっていませんでした。
で、調べたところ、ベタにやり取りするのではなくて、HTTPやXMLの部分をプログラマが意識しなくてもすむようなクラス(Webサービスプロキシクラス)を使うのが普通らしいということがわかりました。難しいことはカプセル化されてしまっていて、単なるオブジェクト指向プログラミングをすればよい、と。素晴らしいですね。
このWebサービスプロキシはWSDLというWebサービス自体を定義したXMLファイルから自動生成させるのが普通の手段らしいです。
Exchange Server 2007以降のWSDLは「EWS」というディレクトリに配置されています。
- https://<サーバー名>/EWS/Services.wsdl
上記URLにアクセスすると、実際にXMLファイルを参照できました。
iPhone用のWebサービスプロキシの自動生成ツール
WSDLファイルは入手できたので、次はこれからWebサービスプロキシを作る必要があります。.NET Frameworkにおいては、wsdl.exeを使うか、Visual StudioからWeb参照を追加することによってWebサービスプロキシを自動生成出来るらしいです。ではiPhone用には何があるのか…?ということで色々探してみました。見つかったのは以下のあたりです。
- iPhone Development: Web Services Fun(WSMakeStubs)
- wsdl2objc – Project Hosting on Google Code
- SudzC (alpha) clean source code from your web services
で、実際にやってみた…のですが、残念ながら正常にソースコードを生成できたのはSudzCのみ、でも、SudzCもきちんとしたソースコードは生成できなかった、というのが私の試した結果です(2010/3/5の段階)。wsdl2objcとSudzCに関しては今後の開発に期待したいところですね。残念。
ちなみにExchange Web ServiceをVisual StudioからWeb参照すると、きちんとWebサービスプロキシクラスが生成されました。このあたりは流石に同じ会社の作った製品だなぁ、とおもいました。(正直なところMSの作るWSDLがスタンダードな物では無いんじゃないのか?という気もしますが…。)
結局どうしたらいいのか
じゃぁ、結局どうしたら良いのか?というと、現時点では以下で紹介されているような方法でガリガリやらなくてはいけないっぽいです。私はもう諦めてガリガリ書こうと思ってます。
ちょっとすでにうんざりしている、というのが正直なところですけどね…。本当に皆こうやってるのかなぁ?