10

我有两种方法命名为

[OperationContract]
UserAccount GetUser(Int32 id);

[OperationContract]
UserAccount GetUser(string username, string password);

当我尝试构建它们时,他们说您不能在服务中使用相同名称的方法?是吗。

4

4 回答 4

14

这是 WSDL 的限制。它不支持与 C#/.NET 相同的重载概念,因此服务上的方法名称必须是唯一的。您有两种选择来解决您的问题。

第一个是为您的方法使用不同的名称。另一种是在您的 OperationContracts 之一上设置Name属性,如下所示

[OperationContract(Name="GetUserById")]
UserAccount GetUser(Int32 id);

[OperationContract]
UserAccount GetUser(string username, string password);
于 2013-03-07T10:07:46.317 回答
4

WSDL 不支持与 c# 相同的重载概念。您可以在 OperationContract 中使用 Name 来指定您的方法

 [OperationContract(Name="GetUserInt")]
 UserAccount GetUser(Int32 id);

 [OperationContract(Name="GetUserString")]
 UserAccount GetUser(string username, string password);
于 2013-03-07T10:10:11.123 回答
2

试试这个:

- [OperationContract(Name= "GetUserWithID")]
   UserAccount GetUser(Int32 id);

- [OperationContract(Name= "GetUserWithUserName")]
  UserAccount GetUser(string username, string password);

更多信息

于 2013-03-07T10:08:46.827 回答
0

这是 WCF 的缺点。这背后的原因是,当我们为客户端依赖服务时,不应该有重复,否则客户端会混淆哪个方法在做什么?因此,这里有解决问题的选项。通过使用 Operation Contract 的不同 name 属性。

[OperationContract(Name="GetUserByID")]

UserAccount GetUser(Int32 id);

[OperationContract(Name="GetUserByUName_Password")]

UserAccount GetUser(字符串用户名,字符串密码);

于 2015-12-27T00:33:42.810 回答