Как разделить контракт WCF без дублирования? - PullRequest
0 голосов
/ 29 ноября 2018

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

[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();
}

Я думал, что это сработает, но НЕТ - он ломает эти клиенты, потому что теперь эти методы расположены по разным путям в WSDL, хотя я принимаю только IMyService :

Было: net.tcp://foobar/IMyService/Method1

Стало: net.tcp://foobar/IMySubService1/Method1

И это проблема.Я не могу разделить свой контракт на интерфейсы без дублирования кода (один для реализации и один явно агрегированный для контракта), каким-либо образом я могу решить его?

1 Ответ

0 голосов
/ 29 ноября 2018

Удалось сделать это следующим образом:

[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 сгенерирован правильно.

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