WCF类实现两个操作契约在不同的服务契约中具有相同的名称

8

我声明了两个服务契约,如下所示:

[ServiceContract]
public interface IContract1
{
    [OperationContract]
    double Add(int ip);
}

[ServiceContract]
public interface IContract2
{
    [OperationContract]
    double Add(double ip);
}

我有一个实现这两个契约的类。我为两个契约创建了两个端点。但是,我无法从客户端代码访问服务。当我尝试更新服务引用时,它显示一个大错误:
“元数据包含无法解决的错误....没有端点在...监听等等。”
我知道您不能拥有两个具有相同名称的 OperationContract,但是是否可能在具有不同签名的不同服务合同中拥有两个操作合同具有相同的名称?
2个回答

14

如果一个服务实现了两个契约,那么您应该为操作契约指定唯一的名称。

[ServiceContract]
public interface IContract1
{
    [OperationContract(Name="AddInt")]
    double Add(int ip);
}

[ServiceContract]
public interface IContract2
{
    [OperationContract(Name="AddDouble")]
    double Add(double ip);
}

我该如何调用这个方法呢? 客户端代码中只展示了一个方法。 - Archie
明白了,我将创建两个客户端对应于两个服务契约。谢谢。 - Archie

6
您可以使用以下内容。
[ServiceContract]
public interface IContract1
{
    [OperationContract(Name = "Add1")]
    double Add(int ip);
}

[ServiceContract]
public interface IContract2
{
    [OperationContract(Name = "Add2")]
    double Add(double ip);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接