自分はこんなかんじで引数の違う、同一名の関数を用意していました。
[OperationContract] public Dictionary<int, string> GetWork() { ... } [OperationContract] public Dictionary<int, string> GetWork(int id) { ... }
WCF サービス(例えば Service1.cs) で定義した関数は、aspx 側でインテリセンスが自動的にクラス名や関数をリストアップしてくれているのですが、このオーバーロードを仕込んだ後はインテリセンスも表示されなくなりました。あと、上記のオーバーロード状態では、ビルドは通るのですがクライアントサイドの JavaScript でサービスを初期化しようとするとサービスが見つかりません。
そのまま実行するとこんなランタイムエラーが出ます。
ワークアラウンドとしては2つ
1.関数を全く異なる名前にしてしまう
2.OperationContract 属性に Name プロパティを指定して関数を別名登録
1と2両方とも、JavaScript 的には別名の関数になりますが、C# コードはオーバーロードとなりますので管理はし易くなるはず![OperationContract(Name = "GetAllWork")] public Dictionary<int, string> GetWork() { ... }
参考情報:
Can we implement method overloading in web service class?
http://stackoverflow.com/questions/10320006/can-we-implement-method-overloading-in-web-service-class
0 件のコメント:
コメントを投稿