我有两种方法命名为
[OperationContract]
UserAccount GetUser(Int32 id);
[OperationContract]
UserAccount GetUser(string username, string password);
当我尝试构建它们时,他们说您不能在服务中使用相同名称的方法?是吗。
我有两种方法命名为
[OperationContract]
UserAccount GetUser(Int32 id);
[OperationContract]
UserAccount GetUser(string username, string password);
当我尝试构建它们时,他们说您不能在服务中使用相同名称的方法?是吗。
这是 WSDL 的限制。它不支持与 C#/.NET 相同的重载概念,因此服务上的方法名称必须是唯一的。您有两种选择来解决您的问题。
第一个是为您的方法使用不同的名称。另一种是在您的 OperationContracts 之一上设置Name属性,如下所示
[OperationContract(Name="GetUserById")]
UserAccount GetUser(Int32 id);
[OperationContract]
UserAccount GetUser(string username, string password);
WSDL 不支持与 c# 相同的重载概念。您可以在 OperationContract 中使用 Name 来指定您的方法
[OperationContract(Name="GetUserInt")]
UserAccount GetUser(Int32 id);
[OperationContract(Name="GetUserString")]
UserAccount GetUser(string username, string password);
试试这个:
- [OperationContract(Name= "GetUserWithID")]
UserAccount GetUser(Int32 id);
- [OperationContract(Name= "GetUserWithUserName")]
UserAccount GetUser(string username, string password);
这是 WCF 的缺点。这背后的原因是,当我们为客户端依赖服务时,不应该有重复,否则客户端会混淆哪个方法在做什么?因此,这里有解决问题的选项。通过使用 Operation Contract 的不同 name 属性。
[OperationContract(Name="GetUserByID")]
UserAccount GetUser(Int32 id);
[OperationContract(Name="GetUserByUName_Password")]
UserAccount GetUser(字符串用户名,字符串密码);