Как я могу разместить два или более веб-сервисов на одном HttpServiceHost? - PullRequest
0 голосов
/ 18 ноября 2011

Я написал сервис, который является частью большого проекта, который предоставляет сам сервис.Я не хочу писать класс композитора, который реализует оба контракта.

Сейчас это похоже на:

ServiceA: IServiceA
ServiceB: IServiceB

и в хост-приложении:

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

, но я не могу сделать это:

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

потому что ServiceA не реализует IServiceB.

Я не хочу писать класс composer, реализующий оба интерфейса, и направлять их к экземплярам, ​​поскольку я не могу изменить реализацию ServiceA.Что я должен делать?

спасибо

1 Ответ

1 голос
/ 18 ноября 2011

Вы можете добавить другую конечную точку, используя различную привязку (например, NetTcpBinding). Но это просто грязно.

Так называемый класс composer - это то, как обычно решается эта проблема.Тем не менее, я не вижу, как неспособность изменить реализацию 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();
    }
}

ComposedServices единственная цель существования - преодолеть технические ограничения -Сам по себе он не имеет никакой ценности и практически не должен связываться с логикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...