Я создал три сборки. Веб-сайт, служба WCF и сборка контрактов, которая содержит интерфейсы, которые реализуют сервисы. Я хотел бы использовать Castle Windsor для создания сервисов для меня на клиенте (веб-сайте), так что мне не нужно иметь конечную точку в web.config веб-сайта для каждой службы, которую я хочу использовать.Использование Castle Windsor WcfУстановка для создания конечных точек клиента
Я хотел бы посмотреть контрактную сборку и получить все служебные интерфейсы в пространстве имен. Прямо сейчас для каждой службы у меня есть что-то вроде следующего при регистрации компонентов с контейнером.
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 выглядит великолепно, но doco немного не хватает ...
, который работает как очарование, большое спасибо. –
что это делает? (f => f.CloseTimeout = TimeSpan.Zero) –
Это устанавливает значение закрытия по умолчанию для всех служб - это значение «TimeSpan», которое задает интервал времени, предоставляемый для завершения операции закрытия. Это значение должно быть больше или равно равным нулю. Значение по умолчанию - 00:01:00. " - от http://msdn.microsoft.com/en-us/library/ms731361.aspx. Также здесь есть хороший поток, который говорит обо всех возможных таймаутах: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/ – kmp