Замок WCFFAFCILITY - Сервисное поведение
-
01-10-2019 - |
Вопрос
Как пользоваться замком WCFFACTION и использовать стандартные настройки файла конфигурации WCF?
Если я регистрирую так:
container.Register(
AllTypes.Pick()
.FromAssemblyNamed("{ServicesAssembly}") // <-- service assembly here
.If(type => type.Name.EndsWith("Service"))
.WithService.FirstInterface()
.Configure(configurer => configurer.LifeStyle.Transient)
.Configure(configurer => configurer.Named(configurer.Implementation.Name))
.Configure(configurer => configurer.ActAs(new DefaultServiceModel()))
);
Я получаю следующую ошибку:
Сервис '{name}' имеет нулевое приложение (неинфраструктурное) конечные точки.
Если я уйду:
.Configure(configurer => configurer.ActAs(new DefaultServiceModel()))
Похоже, что поведение на конфиге игнорируется.
Какое правильное использование здесь?
Решение
Хорошо, понял это :)
Я регистрирую так:
container.Register(
AllTypes.Pick()
.FromAssemblyNamed("{ServicesAssembly}") // <-- service assembly here
.If(type => type.Name.EndsWith("Service"))
.WithService.FirstInterface()
.Configure(configurer => configurer.LifeStyle.Transient)
.Configure(configurer => configurer.Named(configurer.Implementation.Name))
.Configure(configurer => configurer.ActAs(new DefaultServiceModel().Hosted()))
);
То Хостел () есть там, чтобы указать, что я принимаю услуги; Иначе кажется, как будто объект WCF постарается принять их, что привело к конфликтам порта.
Так что проблема заключалась в том, что имя сервиса в файле конфигурации имеет быть полным типом имени реализации. Если нет, не принимает ошибку, указав что-то вдоль строк, не определенных конечных точек. Так что имя сервиса нет так же, как имя, указанное в Виндзоре.
Другие советы
Ты почти там.
Ты нуждаешься в этом:
.ActAs(new DefaultClientModel(WcfEndpoint.FromConfiguration( <<key In Configuration>> )));