服务中具有相同名称的两个操作

时间:2014-05-19 18:23:25

标签: web-services wcf

我可以在同一服务中进行两次具有相同名称(但不同的签名)的操作吗?

示例:

[ServiceContract] 
public interface IMyService {
    [OperationContract]
    bool MyOperation(string target);

    [OperationContract]
    bool MyOperation(List<string> targets); }

我真的需要支持不同的签名,因为我有几个团队正在使用我的服务,只有一个团队需要第二个签名(我不希望团队的其他成员必须更改他们的代码)。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

不,你真的不能对合同有相同的命名操作,但是你可以在两个合同之间分开它们:

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    bool MyOperation(string target);
}

[ServiceContract]
public interface IMyServiceV2
{
    [OperationContract]
    bool MyOperation(List<string> targets);
}


[ServiceContract]
public class MyService : IMyService, IMyServiceV2
{
    public bool MyOperation(string target)
    {
        /* your code*/
        return true;
    }

    public bool MyOperation(List<string> targets)
    {
        /* your code*/
        return true;
    }
}

并公开两个端点:

<services>
  <service name="YourNamespace.MyService ">
    <endpoint
        address="http://localhost:8000/v1"
        binding="webHttpBinding" 
        contract="YourNamespace.IMyService" />

    <endpoint
        address="http://localhost:8000/v2"
        binding="webHttpBinding" 
        contract="YourNamespace.IMyServiceV2" />
  </service>
</services>

或者您可以为OperationContract设置Name参数,但对于SOA服务,它将与重命名函数名称具有相同的结果。