Создание отдельного WSDL для контрактов (по контракту), реализованных одним сервисом - PullRequest
1 голос
/ 27 марта 2019

У меня есть веб-сервис, который реализует два контракта:

[ServiceContract]
public interface IServiceA
{
    [OperationContrcat]
    void OpertationA();
}

[ServiceContract]
public interface IServiceB
{
    [OperationContrcat]
    void OpertationB();
}

public class Service : IServiceA, IServiceB
{
 …
}

в моем web.config У меня есть служба, определенная с отдельными конечными точками для каждого контракта, которая отлично работает, но я хочу иметь возможность экспортировать WSDL для каждого контракта отдельно.

В настоящее время я получаю только один WSDL для всего сервиса, который при использовании генерирует клиента, который видит оба метода из IServiceA и IServiceB.

Мне интересно, есть ли способ предоставить отдельный wsdl таким образом, чтобы, если мне потребуется ServiceAClinet, я мог бы использовать wsdl, который определяет только методы из IServiceA и то же самое для IServiceB.

После некоторых поисков я обнаружил Единственную конечную точку с несколькими контрактами на обслуживание , которая на самом деле хорошая идея и не требует слишком много дополнительной работы, но мне было интересно, возможно ли это сделать без упаковщиков?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Хотя в ООП полезно использовать несколько интерфейсов, но для WCF это приводит к сомнительным преимуществам.Объединяя их, вы заставляете всех использовать один и тот же контекст экземпляра;параллелизм;и, возможно, модели безопасности.

Я хотел бы призвать вас держать службы отдельно.

т.е.

  • отдельные проекты реализации сервисов (только для вашего случая, поскольку вам нужны отдельные WSDL, как правило, рекомендуется поместить реализацию сервиса в одинproject)
  • Методы службы WCF в идеале должны быть не более чем тонкими оболочками для вашей действительной логики службы, определенной в другом проекте, который не имеет ничего общего с WCF / REST / и т.д.Попросите обернуть делегатов вызовами для реализации

Если вы последуете этому совету, тогда проблема получения отдельных WSDL исчезнет.

Расскажите подробнее

enter image description here

0 голосов
/ 28 марта 2019

В итоге я использовал шаблон Singleton и внедрил его, чтобы получить удобство реализации одной службы и несколько разделить интересы клиента.

РЕДАКТИРОВАТЬ:

public class ServiceA : IServiceA {

    public void OperationA() {
        Service.Instance.Operation()
    }

}

ито же самое для ServiceB.Как только я это сделал, я изменил свои файлы .svc, чтобы генерировать WSDL только для реализаций Договора, а не для основной службы.

РЕДАКТИРОВАТЬ 2:

Хотя я нашел решение для моей проблемы, это не таклучшие практики.Намного лучше и лучше подходить к ответу @MickyD, то есть с самого начала разрабатывать сервисы с принципами SOA и SOLID, это сделает ваш сервис намного более удобным и приемлемым для сопровождения.

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