Я создал три сборки. Веб-сайт, служба WCF и сборка контрактов, содержащая интерфейсы, реализуемые службами. Я хотел бы использовать Castle Windsor для создания сервисов для меня на клиентском (веб-сайте), чтобы мне не нужно было иметь конечную точку в web.config веб-сайта для каждой службы, которую я хочу использовать..
Я хотел бы посмотреть на сборку контракта и получить все интерфейсы службы в пространстве имен. Прямо сейчас для каждой службы у меня есть что-то вроде следующего при регистрации компонентов в контейнере.
container.Register(Component.For<ChannelFactory<IMyService>>().DependsOn(new { endpointConfigurationName = "MyServiceEndpoint" }).LifeStyle.Singleton);
container.Register(Component.For<IMyService>().UsingFactoryMethod((kernel, creationContext) => kernel.Resolve<ChannelFactory<IMyService>>().CreateChannel()).LifeStyle.PerWebRequest);
и в моем web.config у меня есть код установки.
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="AuthToken" type="MyNamespace.Infrastructure.AuthTokenBehavior, MyNamespace.Contracts" />
</behaviorExtensions>
</extensions>
<behaviors>
<endpointBehaviors>
<behavior>
<AuthToken />
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647"></readerQuotas>
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint name="MyServiceEndpoint" address="http://someurl/MyService.svc" binding="wsHttpBinding" contract="MyNamespace.Contracts.IMyService"></endpoint>
</client>
</system.serviceModel>
В итоге я получаю несколько конечных точек службы, которые выглядят почти одинаково, и когда мы развертываем их на клиентских машинах, им приходится устанавливать адрес каждой конечной точки, даже если базовый URL-адрес одинаков для всех.
Я хотел бы иметь базовый URL-адрес в моем файле web.config, который захватывался бы через код, а затем регистрировать сервисы в контейнере, используя отражение в сборке контрактов. Мне нужно специальное поведение конечной точки, которое находится в приведенном выше файле конфигурации.
С чего же мне начать? WcfFacility выглядит великолепно, но документации немного не хватает...