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