我有两个名为
的方法[OperationContract]
UserAccount GetUser(Int32 id);
[OperationContract]
UserAccount GetUser(string username, string password);
当我尝试构建它们时,他们说你不能在服务中使用相同的名称方法?是吗。
答案 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);
答案 3 :(得分:0)
这是WCF的缺点。这背后的原因是,当我们为客户端提供服务时,应该没有重复,否则客户端会混淆哪种方法正在做什么?所以这里有解决问题的选项。通过使用Operation Contract的不同名称属性。
[OperationContract的(名称=" GetUserByID&#34)]
UserAccount GetUser(Int32 id);
[OperationContract的(名称=" GetUserByUName_Password&#34)]
UserAccount GetUser(字符串用户名,字符串密码);