【发布时间】:2013-01-23 05:16:00
【问题描述】:
我正在开发一个使用 WCF 服务的项目。我的问题是,在 WCF 服务中,我有一个名为 Display() 的方法,由我的 client1 使用。
现在我想添加另一个具有相同名称但具有一个参数的方法,即。 Display(string name),这样新的clinet2可以使用新的方法,旧的client1可以使用旧的方法。我怎样才能做到这一点?这是我写的代码。
namespace ContractVersioningService
{
[ServiceContract]
public interface IService1
{
[OperationContract]
string Display();
[OperationContract]
string GoodNight();
}
}
namespace ContractVersioningService
{
public class Service1 : IService1
{
public string Display()
{
return "Good Morning";
}
public string GoodNight()
{
return "Good Night";
}
}
}
namespace ContractVersioningService
{
[ServiceContract(Namespace = "ContractVersioningService/01", Name = "ServiceVersioning")]
public interface IService2 : IService1
{
[OperationContract]
string Disp(string greet);
}
}
namespace ContractVersioningService
{
public class Service2 : Service1, IService2
{
public string Display(string name)
{
return name;
}
public string Disp(string s)
{
return s;
}
}
}
【问题讨论】:
-
@Cristian 根据您的链接,我们需要为操作合同提供“名称”属性。但问题是客户端可以使用属性“名称”值访问这两种方法。我希望客户可以通过原始名称访问这些方法。
-
@Sagar 客户端将看到方法的名称,而不是您在 C# 接口中命名的名称,而是
OperationContract.Name值中给出的名称。这才是真正的重点,该方法将不具有相同的名称。这是唯一可行的方法。您根本不能拥有多个具有完全相同名称的服务操作 - WSDL 不执行重载解析。因此,这是链接问题的副本。 -
@Christian.K 但我希望该客户只看到一个通用名称。我怎样才能实现它?
-
WCF 不支持方法重载,例如你不能有两个同名的方法,只是有不同的参数列表。服务描述中的名称必须是唯一的。没有办法绕过这个要求。