为什么在WCF中不允许重载方法?
问题描述:
假设这是一个ServiceContract
为什么在WCF中不允许重载方法?
[ServiceContract]
public interface MyService
{
[OperationContract]
int Sum(int x, int y);
[OperationContract]
int Sum(double x, double y);
}
方法重载允许在C#中,但WCF不允许超载operation contracts
托管程序将抛出一个InvalidOperationException
在主持
答
简而言之,该您无法重载方法的原因与WSDL不支持C#中存在的相同重载概念的事实有关。以下文章详细说明了为什么这是不可能的。
http://jeffbarnes.net/blog/post/2006/09/21/Overloading-Methods-in-WCF.aspx
要解决这个问题,你可以明确指定OperationContract
的Name
财产。
[ServiceContract]
public interface MyService
{
[OperationContract(Name="SumUsingInt")]
int Sum(int x, int y);
[OperationContract(Name="SumUsingDouble")]
int Sum(double x, double y);
}
答
因为在调用时HTTP/SOAP,有同样的方法名合同的将意味着,有没有办法来确定哪些特定的方法在客户端即将调用。
请记住,当通过http调用Web方法时,参数是可选的,并且如果缺失,则使用默认值进行初始化。这意味着这两个方法的调用在HTTP/SOAP上看起来完全相同。
我不确定这是_correct_答案,因此我将以评论形式发布。我相信这是因为WCF旨在与尽可能多的协议一起工作,即非微软技术。重载是.Net和其他一些语言的一个特性,但并非全部。为了最大化服务的可用性,不允许超载。 (我认为) – Smudge202 2012-04-23 07:05:39
似乎是一个很好的答案给我。 – 2012-04-23 07:08:49
@Sleiman好评如潮 – 2012-04-27 07:21:57