如何在一个HttpServiceHost上托管两个或多个Web服务?

时间:2011-11-17 20:17:36

标签: c# wcf service

我写了一个服务,它是大项目的一部分,它自己提供服务。我不想写一个实现两个合同的作曲家类。

现在就像:

ServiceA: IServiceA
ServiceB: IServiceB

并在主机应用程序中:

var host = new HttpServiceHost(typeof(ServiceA), config, baseurl);

但我不能这样做:

host.AddServiceEndpoint(typeof(ServiceB), new WSHttpBinding(), "ServiceB");

因为ServiceA没有实现IServiceB。

我不想编写实现两个接口的composer类并将它们路由到实例,因为我无法更改ServiceA的实现。我该怎么办?

感谢

1 个答案:

答案 0 :(得分:1)

您可以使用不同的绑定添加不同的端点(例如NetTcpBinding)。 但那只是肮脏的方式。

所谓的“作曲家”类是如何解决这个问题的。但是,我不知道如何更改ServiceA实现在这里引入问题......?

创建一个简单的包装类,实际的服务逻辑仍然在具体的专用类中(您不必更改任何内容)。所有这一课都将实施合同委托工作给正确的实施者:

public class ComposedServices : IServiceA, IServiceB
{
    private IServiceA serviceA;
    private IServiceB serviceB;

    public ComposedServices(IServiceA serviceA, IServiceB serviceB)
    {
        this.serviceA = serviceA; 
        this.serviceB = serviceB;
    }

    public void SomeMetodFromA()
    {
        this.serviceA.SomeMethodFromA();
    }
}
{p> ComposedServices存在的唯一目的是克服技术限制 - 仅靠它本身,它没有任何价值,几乎没有任何逻辑。