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

Sle*_*idi 71 .net c# wcf overloading

假设这是一个 ServiceContract

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

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

}
Run Code Online (Sandbox Code Playgroud)

在C#中允许方法重载,但WCF不允许您重载operation contracts 托管程序将抛出一段InvalidOperationException时间托管

Dav*_* Z. 98

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

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

要解决此问题,您可以显式指定该Name属性OperationContract.

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

    [OperationContract(Name="SumUsingDouble")]
    int Sum(double x, double y);
}
Run Code Online (Sandbox Code Playgroud)


Wik*_*hla 28

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

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