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

时间:2010-05-12 09:30:47

标签: c# wcf multiple-inheritance servicecontract operationcontract

我已宣布两份服务合约如下:

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

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

我有一个实现这两个合同的类。我为这两个合同创建了两个端点。但我无法从客户端代码访问该服务。 当我尝试将服务引用更新为:

时,它会显示一个很大的错误
  

元数据包含无法解决的错误....没有端点监听......等等。

我知道你不能拥有两个同名的OperationContract,但是可以在不同的服务合同中签订两份具有相同名称但签名不同的操作合同吗?

2 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:6)

您可以使用以下内容。

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

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