He creado tres conjuntos. Un sitio web, un servicio WCF y un conjunto de contratos que contiene las interfaces que implementan los servicios. Me gustaría utilizar Castle Windsor para crear los servicios para mí en el cliente (sitio web) para que no tenga que tener un punto final en el sitio web del sitio para cada servicio que deseo utilizar.Uso de Castle Windsor WcfFacility para crear extremos del cliente
Me gustaría ver el conjunto de contratos y obtener todas las interfaces de servicio en un espacio de nombres. Ahora mismo para cada servicio tengo algo como lo siguiente al registrar los componentes con el contenedor.
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);
y en mi web.config Tengo el código de configuración.
<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>
termino con varios puntos finales de servicio que todos se ven casi exactamente el mismo y cuando hacemos uso en máquinas clientes tienen que ajustar la dirección de todos los puntos finales a pesar de que la URL base es el mismo para cada uno.
Me gustaría tener una url base en mi web.config que sea atrapada a través del código y luego tenga los servicios registrados en el contenedor usando la reflexión en el ensamblaje de contratos. Necesito el comportamiento especializado del punto final que se encuentra en el archivo de configuración anterior.
¿Dónde empiezo? el WcfFacility se ve muy bien, pero el doco es un poco escaso ...
que funciona como una encanto, muchas gracias. –
¿Qué hace esto? (f => f.CloseTimeout = TimeSpan.Zero) –
Establece el límite de tiempo predeterminado para todos los servicios; esto es "Un valor TimeSpan que especifica el intervalo de tiempo proporcionado para que se complete una operación de cierre. Este valor debe ser mayor que o igual a cero. El valor predeterminado es 00:01:00. " - desde http://msdn.microsoft.com/en-us/library/ms731361.aspx. También aquí hay un buen hilo que habla de todos los tiempos de espera posibles: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/ – kmp