InitializingHandler.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.ServiceModel.Channels;
  5. using System.ServiceModel;
  6. namespace System.ServiceModel.Dispatcher
  7. {
  8. internal class InitializingHandler : BaseRequestProcessorHandler
  9. {
  10. protected override bool ProcessRequest (MessageProcessingContext mrc)
  11. {
  12. InstanceContext ictx = CreateInstanceContext (mrc);
  13. mrc.InstanceContext = ictx;
  14. mrc.OperationContext.InstanceContext = ictx;
  15. return false;
  16. }
  17. InstanceContext CreateInstanceContext (MessageProcessingContext mrc)
  18. {
  19. InstanceContext iCtx = null;
  20. DispatchRuntime dispatchRuntime = mrc.OperationContext.EndpointDispatcher.DispatchRuntime;
  21. IInstanceContextProvider p = dispatchRuntime.InstanceContextProvider;
  22. if (p != null) {
  23. iCtx = p.GetExistingInstanceContext (mrc.IncomingMessage, mrc.OperationContext.Channel);
  24. }
  25. if (iCtx == null) {
  26. ServiceHostBase host = dispatchRuntime.ChannelDispatcher.Host;
  27. iCtx = new InstanceContext (dispatchRuntime.ChannelDispatcher.Host, null, false);
  28. }
  29. iCtx.Behavior = new InstanceBehavior (dispatchRuntime);
  30. return iCtx;
  31. }
  32. }
  33. }