hIDDEN bLOG » MonoTouchからWCFを利用する

2011/6/1 水曜日

MonoTouchからWCFを利用する

このエントリをはてなブックマークに追加
Filed under: .NET,iPhoneアプリ,IT系,MonoTouch — @ 17:09:58

MonoTouchからWCF(Windows Communication Foundation)を利用するための方法を、これが結構苦労したのでまとめておく。

WCFを使えばサーバの機能呼び出しを抽象化して扱えるので、開発効率を大きく向上できる。
またせっかくC#を使っているのだから、サーバサイドも.NETテクノロジにしておけば、ソース共用もしやすくなってなお効率よし。

今回はWindows Azure上のWCF Webロールで動作させてみたが、通常のWCFでも同様に動くはずだ。

おおかたの手順は、MonoTouch公式の資料が参考になる。

WCFプロキシの生成

最初に大事なのは、クライアント側で使うWCFのプロキシクラスの自動生成。
これをMonoDevelopの「Web参照の追加」でやってはいけない。どうやらこれで生成されるプロキシコードは、MonoTouchには対応してないらしい。
WindowsにSilverLight SDKをインストールし、そのコマンドラインツールで生成するのが正解。
通常なら下のようなパスにあるので、このように実行してやる。

"C:\Program Files\Microsoft SDKs\Silverlight\v3.0\Tools\SlSvcUtil.exe" /noConfig http://hoge/HogeService.svc

これでC#のソースファイルが生成されるので、MonoTouchのプロジェクトにコピーして追加すればよい。

ここまでは公式資料のStep1に記載してある。

参照アセンブリの追加

WCFコールで使用するため、下記のようにアセンブリ3つをプロジェクトに追加する。

System.Runtime.Serialization
System.ServiceModel
System.ServiceModel.Web

これが公式資料のStep2だ。

WCFコール部分のコーディング

ここが罠。

var service = new ServiceClient(
	new BasicHttpBinding (),
	new EndpointAddress ( "http://hoge/HogeService.svc" ) ); // ここ注意
service.GetDataCompleted = delegate( object sender, GetDataCompletedEventArgs e ) {
	Console.WriteLine( e.Result );
};
service.GetDataAsync( 31 );

この3行目に相当するコード、資料では"http://hoge"までしか記述がないのだが、これだとサーバから空っぽのレスポンスが返ってきてしまい、結果XMLパースエラーが発生してしまうようだ。
HogeService.svcのサービス名+拡張子部分まで書くのが正解だった。

以上が公式資料のStep3だ。

まとめ

つまづきやすいポイントとしては以下の2点。

  • クライアントのプロキシコードはSilverLightのツールで生成する
  • アドレスは完全に記述する

これでObj-Cユーザーが歯ぎしりするほどの開発効率を発揮できるはずだ!
C#でiOSアプリ開発を楽しもうぜー!!

コメントはまだありません »

コメントはまだありません。

この投稿へのコメントの RSS フィード。 TrackBack URL

コメントする

HTML convert time: 0.732 sec. Powered by WordPress