NServiceBus 문제, Windsor 문제 또는 내 자신의 어리 석음 문제인지 여부는 확실하지 않지만 일시적인 많은 구성 요소를 가리키는 것처럼 보이는 메모리 누수가 발생합니다. 여전히 주위에 매달려있다. 컨테이너가 일시적인 구성 요소를 처리하지 않음
이
내가 내IWantCustomInitialization.Init
방법 안에, 윈저와 NServiceBus를 설정하는 방법입니다 : 내가 찾는 것은
var cont = new Castle.Windsor.WindsorContainer();
cont.Register(
Component.For<IWindsorContainer>().Instance(cont));
Configure.With()
.CastleWindsorBuilder(cont)
.DefiningCommandsAs(t => t.GetCustomAttributes(typeof(MyCommandAttribute), false).GetLength(0) > 0)
.DefiningEventsAs(t => t.GetCustomAttributes(typeof(MyEventAttribute), false).GetLength(0) > 0)
.DefiningMessagesAs(t => t.Namespace != null && t.Namespace.EndsWith(".LocalMessages"))
.XmlSerializer()
.Log4Net()
.IsolationLevel(System.Transactions.IsolationLevel.ReadCommitted)
.UseNHibernateTimeoutPersister()
.RunTimeoutManager()
.Sagas()
.NHibernateSagaPersister()
.DisableRavenInstall();
cont.Register(
Component.For<ISessionFactory>().Named("ABC").LifeStyle.Singleton.UsingFactoryMethod(() =>
{
return Fluently.Configure().Database(() =>
{
return MsSqlConfiguration.MsSql2005.UseOuterJoin()
.ConnectionString(x => x.FromConnectionStringWithKey("ABCData"))
.ShowSql();
}
).Mappings((m) =>
{
AddABCMappingsOnly(m.FluentMappings);
})
.ExposeConfiguration(cfg =>
{
SchemaMetadataUpdater.QuoteTableAndColumns(cfg);
var sv = new SchemaValidator(cfg);
sv.Validate();
})
.BuildSessionFactory();
}));
cont.Register(
Component.For(typeof(IClientLookup), typeof(ICountryLookup), typeof(IOtherLookupLookup)).LifeStyle.Transient.ImplementedBy<ABCDataLookup>().DependsOn(
Dependency.OnComponent(typeof(ISessionFactory), "ABC")));
, 그 가동 시간의 일정 시간 (예를 들어, 가능한 한 메시지를 통해 밀어 2 시간) , 수천 개의 ABCDataLookup
구성 요소가 숨어 있으며 지금까지 볼 수있는 한 이러한 구성 요소를 보유하고있는 유일한 장치는 Windsor 컨테이너입니다 ().)
내 문제 중 일부는 t에서 발생할 수 있습니다. NServiceBus가 컨테이너의 일부 구성 요소를 등록하거나 해상도를 수행 할 책임이 있으므로 실제로 등록이 올바른지 확인할 수 없습니다.
내 등록에 잘못했거나 바보 같은 짓이 있습니까?
이미 잘못 보이는 하나의 일을하는 데 :
cont.Register(
Component.For<IWindsorContainer>().Instance(cont));
NServiceBus가 IFindSagas
구현으로 사용하기 위해 컨테이너에 하나 ISessionFactory
를 등록하기 때문이다. 하지만 IWantToRunWhenTheBusStarts
을 구현하는 다른 구성 요소는 "ABC"ISessionFactory
을 얻고 NServiceBus와 Windsor간에 작업을 수행하는 방법을 찾지 못했습니다.
ABCDataLookup
인스턴스가 삽입 될 것으로 예상되는 다른 구성 요소는 Sagas이며 NServiceBus가 등록/인스턴스화하는 방법을 실제로 볼 수 없습니다.
추가 코드 또는 구성이 표시되어야하는 경우 소리 치십시오.
내 Packages.config : 우리는 제대로 V4의 구성 요소 폐기와는 꽤 몇 가지 문제를 해결 한
<packages>
<package id="Castle.Core" version="3.0.0.4001" targetFramework="net45" />
<package id="Castle.Windsor" version="3.0.0.4001" targetFramework="net45" />
<!-- irrelevant -->
<package id="FluentNHibernate" version="1.3.0.733" targetFramework="net45" />
<package id="Iesi.Collections" version="3.2.0.4000" targetFramework="net45" />
<package id="log4net" version="1.2.10" targetFramework="net45" />
<!-- irrelevant -->
<package id="NHibernate" version="3.3.2.4000" targetFramework="net45" />
<package id="NServiceBus" version="3.3.8" targetFramework="net45" />
<package id="NServiceBus.CastleWindsor" version="3.3.8" targetFramework="net45" />
<package id="NServiceBus.Host" version="3.3.8" targetFramework="net45" />
<package id="NServiceBus.Interfaces" version="3.3.8" targetFramework="net45" />
<package id="NServiceBus.NHibernate" version="3.3.8" targetFramework="net45" />
</packages>
당신은 이것을 읽었습니까 : http://devlicio.us/blogs/krzysztof_kozmic/archive/2010/08/27/must-i-release-everything-when-using-windsor.aspx – Marwijn
@ Marwijn - 나는 그것을 읽었지만 어떤 통찰력도 제공하지 않았다. 나는 두렵다. –
ABCDataLookup 인스턴스에 대한 Sagas 인스턴스 수를 확인할 수 있습니까? 일치하는 경우 Sagas는 windsor 컨테이너가 아닌 참조를 유지해야한다고 비난했습니다. –