WCF のサービスコントラクトでは、OperationContractAttribute を付けたメソッドのオーバーロードが出来ません。厳密に言えば、同じ名前のメソッドをクライアントに公開できません。
例えば次のサービス。同名のメソッドが3つ定義されていて、その全てに OperationContractAttribute が付いています。
[ServiceContract] public interface ISampleService { [OperationContract] string GetName(string userCode); [OperationContract] string GetName(Guid userId); [OperationContract] string GetName(string userCode, int groupNo); }
このインタフェースを実装したサービスを ServiceHost でホストしようとすると、InvalidOperationxception が発生します。
この問題は、メソッド名を変更するか、OperationContractAttribute の Name プロパティを使えば回避可能。
OperationContractAttribute の Name プロパティを使ったサンプルは次の通りです。
[ServiceContract] public interface ISampleService { [OperationContract(Name = "GetNameByCode")] string GetName(string userCode); [OperationContract(Name = "GetNameById")] string GetName(Guid userId); [OperationContract(Name = "GetNameByCodeAndGroupId")] string GetName(string userCode, int groupNo); }
個人的には、サービスコントラクトのメソッドはオーバーロードしないで、違う名前を付けた方が良いと思います。Name プロパティを使った場合でも、名前の重複を避ける必要があるので。