分散アプリケーション・テクノロジ
SmartClientやClickOnceを利用した場合クライアントとサーバーサイドの連携では通常Webサービスや.NET Remoting等の分散アプリケーション・テクノロジを用いる事になるが、.NETFrameworkとVisualStudioの登場以前より簡単に利用可能になってはいるが「Webサービス」「.NET Remoting」の二つをとってみても微妙なプログラミングモデルや配置方法の差異が存在している。
将来的にはWCFの登場によって統一化されるようではあるがサポートプラットフォームの問題や使える状況になるまでには暫く時間が必要だ。
クライアントサイドの技術としてSmartClientもしくはClickOnceを選択し、サーバーサイドも.NETプラットフォームで統一されている場合は速度的なメリットを考えると、.NET Remotingがもっとも妥当な選択になる。
しかしながら、通常の手順では
◆サービス側
- オブジェクトをMarshalByRefObjectから直接継承するかMarshalByRefObjectを継承した呼び出しAdaptorクラスを用意してデリゲートする必要がある
- チャンネル設定と利用するクラスをアクティブにできる型として登録する
◆クライアント側
- チャンネル設定を行いサービスに登録されているオブジェクトを透過プロキシとしてアクティブ化
のステップを行う必要があり、単体テストや保守性・再利用性を考慮すれば間接層の記述が冗長になりちょっとした変更でも面倒な事になる。
この辺りの問題はJavaプラットフォームおいても同様で、Java版にはS2Remotingファミリーと言われる良くできたプロダクト群が用意されている。
とりあえずRMI実装を.NET Remotingに移植中なのだがほぼ基本的な動作は行えるようになってきた。
今迷っているのはオリジナルがS2Remotingという名称なのでネームスペースがS2Remoting、DotNet Remotingとカブっててちょっと気持ち悪いRMIのようにDNRとかって短縮名って一般的じゃないのかな?
[etc]