Использование Castle Windsor WcfFacility для создания клиентских конечных точек

Я создал три сборки. Веб-сайт, служба 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 выглядит великолепно, но документации немного не хватает...

7
задан Aran Mulholland 10 April 2012 в 08:01
поделиться