続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に流れそう・・・