Одна услуга, две конфигурации поведения

Возможно ли иметь одну услугу с двумя конфигурациями поведения? Как вы знаете, возможно иметь один сервис и несколько конечных точек, где вы можете указать другую конфигурацию привязки. Но для того же сервиса мне нужно иметь разные виды обслуживания.

Если я попробую что-то вроде этого:

<services>
 <service name="Service.Service1" behaviorconfiguration="Behavior1">
 <host>
 <baseaddresses>
 ...
 </baseaddresses>
 </host>
 <endpoint ...="">
 </endpoint>
 </service>
 <service name="Service.Service1" behaviorconfiguration="Behavior2">
 <host>
 <baseaddresses>
 ...
 </baseaddresses>
 </host>
 <endpoint ...="">
 </endpoint>
 </service>
</services>

... Я получил ошибку "Детский элемент с именем" служба "с тем же ключом уже существует в той же области конфигурации"

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

2 ответа

Кажется, что вы должны зарегистрировать тот же класс обслуживания с другим именем службы. Поведение службы является частью конфигурации службы, поэтому, если вы хотите использовать разные типы поведения, вам следует настроить различные службы. Мой вопрос к вам: если у вас будет одна услуга с двумя формами поведения, как wcf решит использовать это или другое? Почему вы решаете с наследованием плохо?


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

  • Выберите другое имя для службы - будет какая-то схема, такая как name= "Service.Service1.Entry1"
  • Напишите пользовательский ServiceHost (возможно, в сочетании с IInstanceProvider), который будет игнорировать последнюю часть .Entry1 и создает экземпляр службы, используя имя Service.Service1.

Еще один способ - ввести динамический тип с именем "Service.Service1.Entry1", унаследованный от Service.Service1, когда приложение инициализируется. Эта часть очень важна - т.е. Для каждой упомянутой службы вы должны динамически создавать n подтипов при запуске приложения, чтобы вы могли использовать их по назначению.

licensed under cc by-sa 3.0 with attribution.