Acabo de ingresar al MEF y me he encontrado con un problema que no puedo resolver. Tengo un servicio de Windows que está leyendo en mi DLL (a través de MEF) y cada DLL es un host de servicio WCF. Cuando ejecuto mi servicio de Windows y leo en las DLL todo funciona bien, excepto que cada vez que una de las DLL de WCF obtiene alguna "actividad", entonces reinstalan y luego procesan los datos que ingresan. Los necesito para crear una instancia al principio. es posible?MEF + WCF ¿Servicio Host?
Respuesta
WCF servicios por defecto a una por ejemplo el modo de llamada. Esto significa que una instancia nueva de su servicio WCF se instancia para cada invocación de método entrante. Parece que lo que quieres es un modo de instancia singleton, pero realmente quieres evitar esto si la escalabilidad es un problema.
La forma en que he salido de esto es utilizar el modo de instancia por llamada, pero tengo un almacén de datos estático detrás de las escenas al que sincronizo el acceso. Esto al menos permite a los clientes conectarse, incluso si tienen que bloquear momentáneamente mientras el almacén de datos está en uso una vez que se establece la conexión.
consulte la ayuda de MSDN en System.ServiceModel.InstanceContextMode para más detalles.
que puede manejar esto mediante la aplicación de un IServiceBehavior
y un IInstanceProvider
, registrando mi implmentation de IServiceBehavior
en OnStart
, y tener IInstanceProvider
gestionar duración del objeto para usted. En particular, puede usar un contenedor de inversión de control que sirva la misma instancia de su tipo de servicio en cada solicitud (es decir, comportamiento de tipo singleton sin ser un singleton).
public partial class MyServiceHost : ServiceBase {
// details elided
protected override void OnStart(string[] args) {
this.Host = new ServiceHost(typeof(MySerivce));
this.Host.Description.Behaviors.Add(new MyServiceBehavior());
this.Host.Open();
}
}
public class MyServiceBehavior : IServiceBehavior {
public void AddBindingParameters(
ServiceDescription serviceDescription,
ServiceHostBase serviceHostBase,
Collection<ServiceEndpoint> endpoints,
BindingParameterCollection bindingParameters
) { }
public void ApplyDispatchBehavior(
ServiceDescription serviceDescription,
ServiceHostBase serviceHostBase) {
IIoCContainer container = new IocContainer();
foreach (var cdBase in serviceHostBase.ChannelDispatchers) {
ChannelDispatcher cd = cdBase as ChannelDispatcher;
if (cd != null) {
foreach (EndpointDispatcher ed in cd.Endpoints) {
ed.DispatchRuntime.InstanceProvider = new MyInstanceProvider(
container,
serviceDescription.ServiceType
);
}
}
}
}
public void Validate(
ServiceDescription serviceDescription,
ServiceHostBase serviceHostBase
) { }
}
public class MyInstanceProvider : IInstanceProvider {
readonly IIocContainer _container;
readonly Type _serviceType;
public InstanceProvider(IIoCContainer container, Type serviceType) {
_container = container;
_serviceType = serviceType;
}
public object GetInstance(InstanceContext instanceContext, Message message) {
return _container.Resolve(_serviceType);
}
public object GetInstance(InstanceContext instanceContext) {
return GetInstance(instanceContext, null);
}
public void ReleaseInstance(InstanceContext instanceContext, object instance) { }
}
- 1. Servicio de host de WCF: puntos finales en C#
- 2. Apague el host de servicio WCF en Visual Studio
- 3. El host del servicio WCF no puede encontrar ningún metadato de servicio
- 4. Configuración personalizada del servicio WCF
- 5. Servicio Msmq y WCF
- 6. Calling servicio WCF por VBScript
- 7. Pasar credenciales de un servicio wcf a otro servicio wcf
- 8. Envío de mensajes al proceso de host WCF
- 9. Reemplazar la biblioteca del servicio WCF sin reiniciar el servicio
- 10. Documentación de servicio WCF
- 11. WCF Memoria Servicio Leaks
- 12. Servicio WCF verdaderamente asíncrono
- 13. servicio WCF con Qt?
- 14. WCF y varios encabezados de host
- 15. Servicio de dominio vs Servicio WCF?
- 16. ¿Es un servicio WCF un servicio web?
- 17. Servicio WCF host con enlace net.tcp a través del Administrador de IIS 7.5
- 18. Log4Net con WCF en ejecución como servicio
- 19. Servicio WCF que devuelve otro servicio (¿fábrica de servicio?)
- 20. devolver xdocument del servicio wcf
- 21. valores por defecto servicio WCF
- 22. WCF Servicio Web o API
- 23. WCF Servicio de Windows TimeOut
- 24. Hosting servicio WCF en azul
- 25. Sharepoint 2010 servicio WCF encargo
- 26. WCF. Servicio de métodos genéricos
- 27. pasar Diccionario de servicio WCF
- 28. Cómo depurar el servicio WCF?
- 29. WCF servicio JSON devuelto XML de Falla
- 30. WCF REST Servicio JSON Publicar datos
Supongo que podría darme una pequeña muestra o tal vez entrar en más detalles. De ninguna manera soy una exportación en MEF o WCF. – Travyguy9
Agregué una implementación barebones de lo que estoy hablando. La clave es la inversión del contenedor de control que gestiona la duración del objeto. – jason
¿Qué conjunto está ubicado en IIocContainer? – Travyguy9