.NET Micro Frameworkでネットワークプログラミングする時に便利なクラス達

今、.NET GadgeteerでWindows Azure Storageのテーブルに接続するコードを書いているところですが、よく使うクラスと使用上の注意点をメモっときます。

RESTでWebサービスに接続するには、当然

  • HttpWebRequest
  • HttpWebResponse

の二つのクラスが必要です。そして当然の様に用意されています。若干の細かい違いはあるものの、フルの.NET Frameworkのライブラリとほぼ同じ。デスクトップアプリやWebアプリでのコーディングそのままの勢いで書いちゃってください。名前空間は同じく、System.Netです。使うときには、プロジェクトの参照にSystem.Http アセンブリを加えてください。

XMLデータを受信して解析するには、

  • XmlReader

を使います。このクラスはフルの.NET Frameworkとはかなりメソッド構成が違います。このクラスの使い方はまた別の機会で。名前空間はSystem.Xmlで、使うにはSystem.Xml アセンブリーを参照に追加してください。System.Xml.Legacy アセンブリーは必要ありません。XmlReaderがあるならXmlWriterを使いたい…そんなあなたへ。一応System.Ext.Xml空間にありますが、このクラスは、DPWS(Device Profile For Web Service)ライブラリ用に用意されているクラスで、MFDpwsExtentions というアセンブリーで提供されています。このアセンブリーは比較的サイズが大きく、フルの.NET FrameworkのXmlWriterとは使い勝手も違い、更に、XML文を組み立てるなら、文字列の足し算で十分じゃない?ということで、DPWSを使う場合以外は使わなくてもよいでしょう。小型の組込み機器制御だし。

文字列を組み立てるとなると、

  • StringBuilder

も欲しいところです。このクラス、.NET Micro Frameworkの過去のバージョンでは、名前空間が違うところにあったりしたのですが、4.xではSystem.Textにちゃんと用意されています。

で、URL文を組み立てる段になると、UriクラスのEscapeDataString()メソッドが欲しくなります。これは、.NET Micro FrameworkのUriクラスには用意されていません。困ったな。現在調査中ですが、

  • Regex

クラスのEscape()メソッドがどうやら使えそう。このクラスは、System.Text.RegularExpressions 名前空間にあります。使う場合は、名前空間と同じ名前のアセンブリーを参照に追加してください。

さて。HttpWebRequestクラスを使い、GetRequestStream()メソッドでストリームを取り出して、データをWebサーバーに送る場合、UTF8でエンコードされたバイト列に文字列を変換します。これは、

  • Encoding.UTF8.GetBytes(body)

でエンコード可能です。System.Text名前空間にEncodingクラスがあります。

更に、暗号化など行う場合は、私のブログの前に投稿した記事を見てもらう必要があります。SHA1、HMACなどで暗号化したバイト列を今度はBase64エンコーディングした文字列への変換が必要になります。

  • Convert.ToBase64String(buf)

というようにConvertクラスのToBase64String()メソッドで一発変換。

といったように、一通りWebプログラミングに必要なクラス、メソッドが用意されているので、.NET Gadgeteer/Micro Frameworkで、ネットワーク連携プログラミングをお楽しみください。