Stworzyłem trzy zespoły. Witryna internetowa, usługa WCF i zestaw kontraktów zawierający interfejsy implementowane przez usługi. Chciałbym użyć Castle Windsor do stworzenia usług dla mnie na kliencie (stronie internetowej), tak, że nie muszę mieć punktu końcowego w web.config strony internetowej dla każdej usługi, której chcę użyć.Używanie Castle Windsor WcfFacility do tworzenia punktów końcowych klienta
Chciałbym spojrzeć na montaż kontraktowy i uzyskać wszystkie interfejsy usług w przestrzeni nazw. W tej chwili dla każdej usługi mam coś w rodzaju następującego po zarejestrowaniu komponentów w kontenerze.
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);
oraz w moim web.config Mam kod instalacyjny.
<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>
I skończyć z wielu punktów końcowych usługi, które wszystkie wyglądają niemal dokładnie taki sam, a kiedy wdrożyć na komputerach klientów oni muszą ustawić adres każdego punktu końcowego choć bazowy adres URL jest taki sam dla każdego.
Chciałbym mieć bazowy URL w moim web.config, który jest przechwytywany przez kod, a następnie mieć usługi zarejestrowane w kontenerze za pomocą refleksji na temat montażu kontraktów. Potrzebuję wyspecjalizowanego zachowania punktu końcowego, które znajduje się w powyższym pliku konfiguracyjnym.
Gdzie zacząć? WcfFacility wygląda świetnie, ale doktor trochę brakuje ...
że działa jak urok, dziękuję bardzo. –
co to robi? (f => f.CloseTimeout = TimeSpan.Zero) –
Ustawia domyślny czas zamykania dla wszystkich usług - jest to "Wartość TimeSpan określająca przedział czasu przewidziany dla zakończenia operacji. Wartość ta powinna być większa lub równa równa zero, domyślnie 00:01:00. " - z http://msdn.microsoft.com/en-us/library/ms731361.aspx. Również tutaj jest dobry wątek, który mówi o wszystkich możliwych limitów czasu: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/ – kmp