Ich habe drei Assemblys erstellt. Eine Website, ein WCF-Dienst und eine Vertragsassembly, die die von den Diensten implementierten Schnittstellen enthält. Ich möchte Castle Windsor verwenden, um die Dienste für mich auf dem Client (Website) zu erstellen, so dass ich keinen Endpunkt in der web.config der Website für jeden Dienst, den ich verwenden möchte, haben muss.Verwenden von Castle Windsor WcfFacility zum Erstellen von Clientendpunkten
Ich möchte die Vertragsassembly betrachten und alle Service-Schnittstellen in einem Namespace erhalten. Im Moment habe ich für jeden Dienst Folgendes, wenn ich die Komponenten mit dem Container registriere.
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);
und in meiner web.config habe ich den Setup-Code.
<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>
ich am Ende mit mehreren Service-Endpunkten auf, die alle fast genau gleich aussehen, und wenn wir auf Kunden Maschinen implementieren sie die Adresse von jedem Endpunkt zu setzen, obwohl die Basis-URL für jeden gleich ist.
Ich möchte eine Basis-URL in meiner web.config haben, die durch Code ergriffen wird und dann die Dienste mit dem Container mit Reflektion über die Verträge Assembly registriert haben. Ich benötige das spezielle Endpunktverhalten, das in der obigen Konfigurationsdatei enthalten ist.
Wo also fange ich an? die WcfFacility sieht gut aus, aber die doco ist ein bisschen fehlt ...
, die wie ein Werk Charme, vielen Dank. –
was macht das? (f => f.CloseTimeout = TimeSpan.Zero) –
Das legt das Standard-closetimeout für alle Dienste fest - das ist "Ein TimeSpan-Wert, der das Zeitintervall angibt, das für einen Abschlussvorgang bereitgestellt wird. Dieser Wert sollte größer als oder sein gleich Null. Der Standardwert ist 00:01:00. " - von http://msdn.microsoft.com/en-us/library/ms731361.aspx. Auch hier ist ein guter Thread, der über alle möglichen Timeouts spricht: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/ – kmp