如何不重复地分割WCF合同?

时间:2018-11-29 08:38:02

标签: c# wcf

我想将服务重构为多个子服务,并按其业务范围分隔:

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    int Method1();
    [OperationContract]
    int Method2();
}

还有一些已经在使用它的用户,所以我不能随便跟他们说声再见,重构所有内容。

因此,为了避免重复,我事先使用了抽象和接口,在这种情况下,我尝试将协定分离为多个接口,并将主要接口保留为聚合器:

[ServiceContract]
public interface IMyService : IMySubService1, IMySubService2
{
}

[ServiceContract]
public interface IMySubService1
{
    [OperationContract]
    int Method1();
}

[ServiceContract]
public interface IMySubService2
{
    [OperationContract]
    int Method2();
}

我以为这样做会成功,但是不,这正在破坏那些客户端,因为即使Im 仅托管IMyService ,这些方法位于WSDL中的不同路径上:

它是:net.tcp://foobar/IMyService/Method1

它变成:net.tcp://foobar/IMySubService1/Method1

那是个问题。我无法通过没有代码的重复(将一个用于实现,将一个显式聚合以用于合同)将我的合同分为多个接口,我可以通过任何方式解决它?

1 个答案:

答案 0 :(得分:0)

设法做到这一点:

[ServiceContract(Name = nameof(IMyService))]
public interface IMyService : IMySubService1, IMySubService2
{
}

[ServiceContract(Name = nameof(IMyService))]
public interface IMySubService1
{
    [OperationContract]
    int Method1();
}

[ServiceContract(Name = nameof(IMyService))]
public interface IMySubService2
{
    [OperationContract]
    int Method2();
}

现在WSDL正确生成了。