Один сервис, две конфигурации поведения - PullRequest
6 голосов
/ 11 августа 2010

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

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

<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>

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

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

Ответы [ 2 ]

2 голосов
/ 11 августа 2010

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

1 голос
/ 13 августа 2010

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

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

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

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