Using existing unitycontainer and getting object disposed error for UnityObjectBuilder

474 views
Skip to first unread message

Jay j

unread,
Oct 27, 2016, 2:41:00 PM10/27/16
to Particular Software
Helpful information to include
Product name:NServicebus
Version:5.0.0.0
Stacktrace:
NServiceBus.ExceptionInfo.MessageResolution of the dependency failed, type = "xxx", name = "(none)".
Exception occurred while: while resolving.
Exception is: ObjectDisposedException - Cannot access a disposed object.
Object name: 'UnityObjectBuilder'.
-----------------------------------------------
At the time of the exception, the container was:

 Resolving xxx,(none)
 
 ---> System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'UnityObjectBuilder'.
   at NServiceBus.Unity.UnityObjectBuilder.ThrowIfDisposed()
   at NServiceBus.Unity.UnityObjectBuilder.SetProperties(Type type, Object target, IUnityContainer containerForResolve) in C:\BuildAgent\work\550f18a3e9c13e16\src\NServiceBus.Unity\UnityObjectBuilder.cs:line 0
   at NServiceBus.Unity.PropertyInjectionBuilderStrategy.PreBuildUp(IBuilderContext context) in C:\BuildAgent\work\550f18a3e9c13e16\src\NServiceBus.Unity\PropertyInjectionBuilderStrategy.cs:line 31
   at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
   at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
   --- End of inner exception stack trace ---
   at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
   at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
   at .GetModel(EntityExtensionAttributesWrapper wrapper, Nullable`1 pointInTime) in ModelProvider.cs:line 40
   atxxxx.CreateEdlRecord(Guid actionId) in EdlDataProvider.cs:line 68
   at xxxx.Handle(EdlRequest message) in EdlHandler.cs:line 22
   at NServiceBus.Unicast.MessageHandlerRegistry.Invoke(Object handler, Object message, Dictionary`2 dictionary) in C:\Build\src\NServiceBus.Core\Unicast\MessageHandlerRegistry.cs:line 124
   at NServiceBus.InvokeHandlersBehavior.Invoke(IncomingContext context, Action next) in C:\Build\src\NServiceBus.Core\Unicast\Behaviors\InvokeHandlersBehavior.cs:line 23
   at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0() in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 95
   at.Invoke(IncomingContext context, Action next) in IncomingMessageHeaderBehaviour.cs:line 20
   at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0() in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 95
   at NServiceBus.SetCurrentMessageBeingHandledBehavior.Invoke(IncomingContext context, Action next) in C:\Build\src\NServiceBus.Core\Unicast\Behaviors\SetCurrentMessageBeingHandledBehavior.cs:line 17
   at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0() in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 95
   at NServiceBus.LoadHandlersBehavior.Invoke(IncomingContext context, Action next) in C:\Build\src\NServiceBus.Core\Unicast\Behaviors\LoadHandlersBehavior.cs:line 45
   at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0() in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 95
   at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0() in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 95
   at NServiceBus.ExecuteLogicalMessagesBehavior.Invoke(IncomingContext context, Action next) in C:\Build\src\NServiceBus.Core\Unicast\Messages\ExecuteLogicalMessagesBehavior.cs:line 24
   at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0() in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 95
   at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0() in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 95
   at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0() in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 95
   at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0() in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 95
   at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0() in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 95
   at NServiceBus.UnitOfWorkBehavior.Invoke(IncomingContext context, Action next) in C:\Build\src\NServiceBus.Core\UnitOfWork\UnitOfWorkBehavior.cs:line 42
   at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0() in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 95
   at NServiceBus.ChildContainerBehavior.Invoke(IncomingContext context, Action next) in C:\Build\src\NServiceBus.Core\Unicast\Behaviors\ChildContainerBehavior.cs:line 17
   at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0() in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 95
   at NServiceBus.ProcessingStatisticsBehavior.Invoke(IncomingContext context, Action next) in C:\Build\src\NServiceBus.Core\Monitoring\ProcessingStatisticsBehavior.cs:line 23
   at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0() in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 95
   at NServiceBus.AuditBehavior.Invoke(IncomingContext context, Action next) in C:\Build\src\NServiceBus.Core\Audit\AuditBehavior.cs:line 20
   at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
   at NServiceBus.BehaviorChain`1.Invoke() in C:\Build\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 52
   at NServiceBus.Pipeline.PipelineExecutor.Execute[T](BehaviorChain`1 pipelineAction, T context) in C:\Build\src\NServiceBus.Core\Pipeline\PipelineExecutor.cs:line 129
   at NServiceBus.Unicast.Transport.TransportReceiver.OnTransportMessageReceived(TransportMessage msg) in C:\Build\src\NServiceBus.Core\Unicast\Transport\TransportReceiver.cs:line 413
   at NServiceBus.Unicast.Transport.TransportReceiver.ProcessMessage(TransportMessage message) in C:\Build\src\NServiceBus.Core\Unicast\Transport\TransportReceiver.cs:line 344
   at NServiceBus.Unicast.Transport.TransportReceiver.TryProcess(TransportMessage message) in C:\Build\src\NServiceBus.Core\Unicast\Transport\TransportReceiver.cs:line 230
   at NServiceBus.Transports.Msmq.MsmqDequeueStrategy.Action() in C:\Build\src\NServiceBus.Core\Transports\Msmq\MsmqDequeueStrategy.cs:line 266

Description: The message getting processed successfully first time once service is restarted and failing consecutively. I'm using NServicebushost to host the services. 

Szymon Pobiega

unread,
Oct 28, 2016, 2:54:16 AM10/28/16
to Particular Software
Hi

Can you post your bus configuration code? It seems like the container is getting getting disposed by something. Is your container injected somewhere?

Szymon

--
You received this message because you are subscribed to the Google Groups "Particular Software" group.
To unsubscribe from this group and stop receiving emails from it, send an email to particularsoftw...@googlegroups.com.
To post to this group, send email to particula...@googlegroups.com.
Visit this group at https://groups.google.com/group/particularsoftware.
To view this discussion on the web visit https://groups.google.com/d/msgid/particularsoftware/8f63f866-4a90-427a-bd44-c8d42628ea30%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Jay j

unread,
Oct 28, 2016, 4:41:01 AM10/28/16
to Particular Software
Thanks for the response. Following is the code which does the configuration. The first line is a static method which creates the container. 


public class EndpointConfig :
        IConfigureThisEndpoint
    {
        public void Customize(BusConfiguration busConfiguration)
        {
            var container = UnityHelper.Initialise(string.Empty, false);

            busConfiguration.UseTransport<MsmqTransport>();
            busConfiguration.UseSerialization<JsonSerializer>();
            busConfiguration.EnableInstallers();
            busConfiguration.UsePersistence<InMemoryPersistence>();
            NServiceBusHelper.SetLicenseFilePath(busConfiguration);
            busConfiguration.Conventions()
                .DefiningMessagesAs(
                    type =>
                        type.Namespace != null &&
                        (type.Namespace.StartsWith("xxxxxx") ||
                         type.Namespace.StartsWith("xxxxxx") ||
                         type.Namespace.StartsWith("xxxxxx")));
            busConfiguration.UseContainer<UnityBuilder>(
                customizations: customizations =>
                {
                    customizations.UseExistingContainer(container);
                });
To unsubscribe from this group and stop receiving emails from it, send an email to particularsoftware+unsub...@googlegroups.com.

Szymon Pobiega

unread,
Nov 3, 2016, 4:22:16 AM11/3/16
to Particular Software
Hi

Can you provide the detailed version information of your solution (versions of NServiceBus, NServiceBus.Unity and NServiceBus.Host). I've tried to reproduce this behavior with NSB 5.0.0 (as specified in your initial e-mail) with latest compatible NSB.Unity and NSB.Host but all messages were processed correctly. Here's a gist with my repro: https://gist.github.com/SzymonPobiega/10be5a9356b8cc203fceda2e114980db.

Also, can you share the code of your handler and/or any custom behaviors you register in the pipeline? Does you handler implement IDisposable? From the stack trace I see your handler is invoking the container to resolve some components. Where does it get the reference to the container from?

Szymon

To unsubscribe from this group and stop receiving emails from it, send an email to particularsoftw...@googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "Particular Software" group.
To unsubscribe from this group and stop receiving emails from it, send an email to particularsoftw...@googlegroups.com.

To post to this group, send email to particula...@googlegroups.com.
Visit this group at https://groups.google.com/group/particularsoftware.

Daniel Marbach

unread,
Nov 3, 2016, 6:23:34 AM11/3/16
to Particular Software
Hi Jay

We had a bug where the externally owned container was disposed by NServiceBus when the bus was disposed. This was fixed in latest Unity NServiceBus adapter. Please make sure you are using the latest package version for NSB v5 https://www.nuget.org/packages/NServiceBus.Unity/6.2.1

Then the dispose sequence of your infrastructure should be:

Dispose the bus
Dispose the container


Daniel
Reply all
Reply to author
Forward
0 new messages