Sadece MEF'ye giriyorum ve çözemediğim bir problemle karşılaştım. Benim DLL'ler (MEF üzerinden) okuyan bir windows hizmeti var ve her DLL bir WCF Service Host. Windows hizmeti çalıştırdığımda ve DLL'lerde okuduğumda, her şey iyi çalışır, WCF DLL'lerinden biri herhangi bir "etkinlik" aldığında, daha sonra onları yeniden çalıştırır ve sonra gelen verileri işler. Başta bir kez başlatmaları gerekir. Mümkün mü?MEF + WCF Service Host?
cevap
WCF hizmetleri varsayılan. Bu, her gelen yöntem çağrısı için WCF hizmetinizin yeni bir örneğinin başlatıldığı anlamına gelir. İstediğiniz şey, bir tekil örnek modu gibi geliyor, ancak eğer bir sorun olursa, bunu önlemek istersiniz.
Bunun etrafında aldığım yol, çağrı modu başına numaralı telefonu kullanmaktır, ancak erişimi senkronize ettiğim sahnelerin arkasında statik bir veri deposu var. Bu en azından, bağlantı kurulduktan sonra veri deposu kullanımdayken anlık olarak bloke olsalar bile müşterilerin bağlanmasına izin verir.
Daha fazla bilgi için System.ServiceModel.InstanceContextMode numaralı MSDN yardımına bakın.
Sen, bir IServiceBehavior
ve IInstanceProvider
uygulayan OnStart
içinde IServiceBehavior
benim implmentation kayıt ve IInstanceProvider
sizin için nesne ömrünü yönetmek suretiyle bu işleyebilir. Özellikle, her istekte servis türünüzün aynı örneğini sunan denetim konteynerinin tersine çevirisini kullanabilirsiniz (yani, tekil olmayan tekton benzeri davranış). Çağrı örneği modu başına için
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. HTTP WCF Service
- 2. WCF Service Memory Leaks
- 3. WCF Service - Arayüzde ServiceContract'ı göremeden çalışma zamanı
- 4. WCF Data Service - Hata talebi
- 5. WCF service error 400 hatalı istek
- 6. Service Broker ve WCF birlikte çalışabilirliği
- 7. WCF service dataContractSerializer maxItemsInObjectGraph in web.config
- 8. MEF
- 9. MEF: DirectoryPartCatalog
- 10. MEF: CreationPolicy.NonShared
- 11. wcf data service $ filtre aralıkları arasında arama yapmak için
- 12. yapma GET ile bir WCF Web Service çalışma istekleri
- 13. Postsharp Methodboundry yönü WCF Service sınıfı ile çalışmadı
- 14. WCF Windows Service hizmeti olarak hizmet (Windows 7)
- 15. Fiddler çalışırken WCF Data Service neden daha iyi performans gösteriyor?
- 16. WCF Windows Service ile VB6'da iletişim kurun?
- 17. @Service
- 18. bir WCF hizmeti
- 19. Service Reference, Liste
- 20. Mono ve MEF Uyumlular.
- 21. MEF: ComposeParts eksik
- 22. MEF kapsayıcısına örnek ekleme
- 23. MEF ve FABRİKA FABRİKASI
- 24. Bir MEF İthalat Mı?
- 25. MEF Bağımlılıklar ve sürümler
- 26. MEF GetExportedValue meta verileriyle
- 27. MEF Constructor Enjeksiyon
- 28. WCF ve Sabun 1.1
- 29. Service Unavaiable - ApplicationPool başlatılamıyor
- 30. "app.run (host = '0.0.0.0')" Flask
Sanırım bana küçük bir örnek verebilir misiniz yoksa belki daha fazla ayrıntıya girebilir misiniz? MEF veya WCF'de hiçbir şekilde ihracat yapıyorum. – Travyguy9
Konuştuğum şeyin bir barebone uygulamasını ekledim. Anahtar, nesne ömrünü yöneten kontrol kabının ters çevrilmesidir. – jason
IIocContainer hangi kurulumda bulunur? – Travyguy9