为什么在WCF中不允许方法重载?

时间:2012-04-23 07:01:36

标签: c# .net wcf overloading

假设这是ServiceContract

[ServiceContract]
public interface MyService
{
    [OperationContract]
    int Sum(int x, int y);

    [OperationContract]
    int Sum(double x, double y);

}

C#允许方法重载,但WCF不允许重载operation contracts 托管程序将在托管

时抛出InvalidOperationException

3 个答案:

答案 0 :(得分:95)

简而言之,您不能重载方法的原因与WSDL不支持C#中存在的相同重载概念这一事实有关。以下帖子提供了为什么不可能这样做的详细信息。

http://jeffbarnes.net/blog/post/2006/09/21/Overloading-Methods-in-WCF.aspx

要解决此问题,您可以明确指定Name的{​​{1}}属性。

OperationContract

答案 1 :(得分:27)

因为在通过HTTP / SOAP调用时,在合同中具有相同的方法名称将意味着无法确定客户端将要调用哪个特定方法。

请记住,在通过http调用Web方法时,参数是可选的,如果缺少,则使用默认值进行初始化。这意味着两种方法的调用看起来与HTTP / SOAP完全相同。

答案 2 :(得分:1)

原因是WCF应该由不同的客户端通用使用,并且这些客户端不必是.NET,也可能不允许其框架中的Operator/Method overloading。如果是这种情况,则这些方法将无法在那些框架中使用,因此,为确保它可以普遍使用,WCF禁止在OperationContract属性中为您提供name属性,以指定其他名称。如果客户端是.NET,则WCF会自动将其显示为方法重载,否则,它将使用name属性中指定的名称生成一个新方法。