ThinktectureのChristian Weyer氏は、WCFを使ったWebサービスで、コントラクトファースト開発を可能にするVisual StudioアドインであるWSCF.blueのリリースを発表した。
私が最初にコントラクトファーストのWebサービスツールを構築してから長い時間が過ぎました...
WSCFと呼ばれるこのツール(コマンドラインユーティリティとシンプルなVisual Studioアドインの両方がある)は、ASMXプラットフォームを対象にしていました。
コントラクトファースト開発のアイディアには長い歴史がある。コントラクトファーストは、Webサービスリクエストの形式でサービスから流れるメッセージの標準的な表現の必要性から発生している。WSDLとXSDベースのツール、SchemaとWSDLベースの表現などもっとも一般的な言語をサポートし、これらのメッセージ「コントラクト」を開始地点にすることは、ほぼ間違えなく相互運用を解決するためのアプローチである
コントラクトファースト開発は、オブジェクトとXMLのインピーダンスミスマッチに対処するスタイルである。XML Schema言語は、リッチな表現フォーマットである。 コントラクトのモデルを容易にし、シリアライゼーションと相互運用性の問題に対する配慮を軽減する。これには次のようなものが含まれる。
- XSD型拡張と制約などへのスキーマ言語のコントラクトにマップできないこと
- マッピングができないか、少なくても効率的に ジェネリックリストやハッシュマップなどのオブジェクト型とスキーマ型のマップができないこと
- XMLで、親/子の関係があるとき、親が保持している子の参照と子が参照し返している親の参照がオブジェクトグラフで事実上表現できないこと
このアプローチによるアドバンテージには、次のようなものがある。
- 言語に依存しないコントラクトを定義して、相互運用性を促進する。サービスの設計者は、WS-I相互運用性の標準を意識する。
- XSDとWSDLの企業をまたぐコントラクト定義の再利用を促進する。
- サービスのバージョン管理を可能にし、結果として管理に適している。
WCSF.blueは、オープンソースプロジェクトとしてCodePlexでホストされているVisual Studio 2008のアドインである。ツールでできることには次のものがある。
- WSDL Wizardは、開発者が1つ以上のXSDからWSDLを作成することを可能にする。
- DataContractジェネレータ (XSD.exe、XSDObjectGen.exe、Svcutil.exeに似たもの)は、XSD型と同等の.NETコードを生成する。
- サービス/エンドポイント スタブ(SVC)ジェネレータ
- クライアントプロキシジェネレータ
このツールは、まだ既知の問題が存在している。ベータから製品版になるときには解消されることに期待したい。またこのツールは、 バージョン0.7からWSCFのウォークスルーを持っている。クラシックアドインは、いまだに多くの部分と関係を持つ。WCFがコードの中のコントラクトをサポートし、角括弧なし、XSDかWSDLを要求することを考えれば、WSDLとXSDを使ったメッセージのモデリングとサービスコントラクトにフォーカスしたツールがどれだけ重要だろうか?