続WebServiceで渡せるデータ型

ユーザ定義のクラスや、クラスの配列が渡せますが、ちょっと変則的な事をやろうとして躓きました。(^^;
パッケージをカスタマイズするたびにWebMethodを追加するのが嫌だったので、WebServiceを単なるディスパッチャーにすることを考えました。

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using My.Service;
using My.Dao.Entity;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    public Service () {
        //InitializeComponent(); 
    }
    
    // 使用するのはこのメソッドのみ
    [WebMethod]
    public ServiceResponse Dispatch(ServiceRequest request)
    {
        return new My.Service.Impl.DispatcherImpl().Dispatch(request);
    }

    // Person型を認識しないのでダミーを作成
    [WebMethod]
    public Person[] DummyGetPerson()
    {
        return null;
    }    
}

ServiceRequestを渡してServiceResponseを受け取るDispatchメソッドだけにして、RequestにはDIするコンポーネント名とメソッド及び、引数を設定しています。Responseには成否と戻り値が入ってます。戻り値には色々な型があるのでobjectに放り込んでいますが、WebMethodで使っていない型だと、やっぱ認識してくれません。仕方ないのでダミーメソッドを用意して無理やり認識させましたが、もっと良い方法はないのかしら?(^^;

一応、WebService経由で色々出来るようになったので、今はデータアクセスの調査に取り掛かり中。DataSetを使おうか、普通のクラスにしようか迷っていますが、O/Rマッパーの実験結果が良くなくてDataSetに流れそう・・・