Ho creato tre assiemi. Un sito Web, un servizio WCF e un assembly di contratti che contiene le interfacce implementate dai servizi. Vorrei utilizzare Castle Windsor per creare i servizi per me sul client (sito Web) in modo che non debba avere un endpoint nel web.config del sito Web per ciascun servizio che desidero utilizzare.Utilizzo di Castle Windsor WcfFacilità di creazione degli endpoint client
Vorrei esaminare l'assembly del contratto e ottenere tutte le interfacce di servizio in uno spazio dei nomi. In questo momento per ogni servizio ho qualcosa di simile al seguente quando si registrano i componenti con il contenitore.
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);
e nel mio web.config ho il codice di installazione.
<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>
io alla fine con più endpoint di servizio che tutti guardano quasi esattamente lo stesso e quando si distribuisce su clienti macchine che devono impostare l'indirizzo di ogni endpoint, anche se l'URL di base è la stessa per tutti.
Mi piacerebbe avere un URL di base nel mio web.config che viene afferrato attraverso il codice e quindi avere i servizi registrati con il contenitore utilizzando la riflessione sull'assembly contratti. Ho bisogno del comportamento dell'endpoint specializzato che si trova nel file di configurazione di cui sopra.
Dove posso iniziare? la WcfFacility sembra ottima ma il doco è un po 'carente ...
che funziona come un fascino, grazie mille. –
cosa fa questo? (f => f.CloseTimeout = TimeSpan.Zero) –
Imposta il valore di chiusura predefinito per tutti i servizi, ovvero "Un valore TimeSpan che specifica l'intervallo di tempo previsto per il completamento di un'operazione di chiusura. Questo valore deve essere maggiore o uguale a uguale a Zero. L'impostazione predefinita è 00:01:00. " - da http://msdn.microsoft.com/en-us/library/ms731361.aspx. Anche qui c'è un buon thread che parla di tutti i possibili timeout: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/ – kmp