Skip to content
This repository has been archived by the owner on Oct 12, 2022. It is now read-only.

Getting System.NullReferenceException #45

Open
rahulrajatsingh opened this issue Aug 9, 2016 · 4 comments
Open

Getting System.NullReferenceException #45

rahulrajatsingh opened this issue Aug 9, 2016 · 4 comments
Labels

Comments

@rahulrajatsingh
Copy link

I just added this package to my service and tested it. I am getting following exception just by adding this package dependency.

System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.ApplicationInsights.Wcf.Implementation.WcfOperationContext.DiscoverOperationName(OperationContext operationContext)
at Microsoft.ApplicationInsights.Wcf.Implementation.WcfOperationContext..ctor(OperationContext operationContext)
at Microsoft.ApplicationInsights.Wcf.Implementation.WcfOperationContext.GetContext()
at Microsoft.ApplicationInsights.Wcf.Implementation.WcfInterceptor.BeforeSendReply(Message& reply, Object correlationState)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.BeforeSendReplyCore(MessageRpc& rpc, Exception& exception, Boolean& thereIsAnUnhandledException)

@tomasr
Copy link
Contributor

tomasr commented Aug 9, 2016

@rahulrajatsingh Could you tells us a little information?

  • What .NET Version is your code compiled for, and what .NET Framework version is it running no?
  • Are you using duplex contracts?
  • Does your service code manipulate OperationContext in any way during the operation execution?
  • What behaviors are you enabling on your service?

From the stack trace, it looks like the exception is coming up when processing the response message generated by the service... it's not finding the same OperationContext as the one that was present when the request message came in, so likely the context is in the wrong state to look up the necessary information.

@tomasr
Copy link
Contributor

tomasr commented Aug 9, 2016

OK, found one possible repro scenario: This same exception will happen if the service operation that was called explicitly or implicitly ends up calling another remote service.

However, it will only happen if the calling code instantiates a new OperationContextScope and does not dispose it correctly, so something like this:

var channel = new SomeServiceClient();
// the following line should be in a using statement
var scope = new OperationContextScope((IContextChannel)channel);
// use OperationContext for something
OperationContext.Current.OutgoingMessageHeaders.Add(new SomeCustomHeader());

// call service
channel.CallSomeOperation();

Code like this causes the OperationContext for the child call to be stuck on the current thread, so when we look at OperationContext.Current later on, we're getting the wrong context.

@rahulrajatsingh
Copy link
Author

Please find all the requested details below:

What .NET Version is your code compiled for, and what .NET Framework version is it running no?

4.5.1

Are you using duplex contracts?

No

Does your service code manipulate OperationContext in any way during the operation execution?

Yes we are pushing claims in the OutgoingMessageHeaders for other service calls.

What behaviors are you enabling on your service?

No custom behavior. Its configured to use Single instance with Concurrency mode as Multiple and some throttling using configurations.

@tomasr
Copy link
Contributor

tomasr commented Aug 10, 2016

@rahulrajatsingh Can you confirm if your code suffers by any chance of the issue mentioned above of not disposing correctly the OperationContextScope object?

Also, version 0.26.0-build14298 was published yesterday with a workaround for this. Can you try it and let us know if it resolves the issue for you?

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

3 participants