.NET Micro FrameworkでWeb ServiceのREST APIにアクセスする方法

はい、表題のやり方を説明します。

.NET Micro Frameworkには、WPFやSilverlightアプリケーション向けの様なWCFサービス参照追加機能はありません。けど大丈夫。RESTのAPIの場合、URIを指定してHTTPでアクセスして、ATOMならXML、JSONならJSON形式でリゾルブすれば、いいですよね。.それらは、通常のPCクライアントアプリでも、HttpWebRequestとHttpWebResponseとか使えば簡単にアクセスできちゃうわけです。で、.NET Micro Frameworkには、これらのクラスがちゃんと用意されているので、それを使えば簡単にREST形式のWeb Serviceにアクセスできちゃいます。
更に、今は、Azure使えばすぐREST Webサービス稼働できるし、FezMini+ネットワークボード買っちゃえばすぐ試せるので、ほんと皆さん試してみてね。
※ちなみに、SOAPの場合は、こちらも基本必要なライブラリ揃っているので、SOAPプロトコルの概要知ってればそれほど難しくない

さて、ではやり方を簡単に説明しておきましょう。

まず、.NET Micro Frameworkのアプリケーションプロジェクトを一つ作ります。
アッセンブリー参照を追加します。アッセンブリーは、c:\Program Files\Microsoft .NET Micro Framework\v4.1\Assembly\le に入っています。

  • System.IO
  • System.Http
  • System.Xml

の3つのアッセンブリーです。

後は、以下のようなコードを書けば、出来上がり 

using System.IO;using System.Net;using System.Xml;…    Uri serviceUri = new Uri("https://.../SensedDataSet.svc");    HttpWebRequest req = HttpWebRequest.Create(serviceUri) as HttpWebRequest;    try {        HttpWebResponse response = req.GetResponse();        using (var stream = response.GetStream()) {           XmlReader xmlReader = XmlReader.Create(stream);           while (xmlReader.Read()){               switch (xmlReader.NodeType) {               ...

レコードのインサートを行うような場合は、GetResponseする前に、reqのContentType(POSTをセット)に値をセットして、送信内容の文字列を作り、System.Text.UTF8Encoding.UTF8のGetBytesメソッドをコールしてバイトデータを作成し、そのバイトデータの長さをContentLengthに代入して、GetRequestStream()で送信用のストリームを取り出し、バイトデータを書き込んでCloseしてから、GetResponseをコールすれば、Okです。
サーバーをEntity Framework、WCF Data Serviceで作ってから、そのクライアントとして上記の方法を試せば、Httpレベルでどんなデータをやり取りしているかの勉強にもなりますよ。