WCF服务不支持重载方法?

时间:2013-03-07 10:05:26

标签: wcf overloading

我有两个名为

的方法
[OperationContract]
UserAccount GetUser(Int32 id);

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

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

4 个答案:

答案 0 :(得分:14)

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

首先是为您的方法使用不同的名称。另一个是在你的一个OperationContracts上设置Name属性,如此

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

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:2)

试试这个:

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

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

More Info

答案 3 :(得分:0)

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

[OperationContract的(名称=" GetUserByID&#34)]

UserAccount GetUser(Int32 id);

[OperationContract的(名称=" GetUserByUName_Password&#34)]

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