2 using System
.Collections
.Generic
;
4 using System
.ServiceModel
;
5 using System
.ServiceModel
.Dispatcher
;
7 namespace Microsoft
.ServiceModel
.Samples
10 //This class contains the implementation of IOperationInvoker
11 //which is used to persist the service instance after invoking the
13 class OperationInvoker
: IOperationInvoker
15 IOperationInvoker innerOperationInvoker
;
17 public OperationInvoker(IOperationInvoker innerOperationInvoker
)
19 this.innerOperationInvoker
= innerOperationInvoker
;
22 public object[] AllocateInputs()
24 return innerOperationInvoker
.AllocateInputs();
27 public object Invoke(object instance
, object[] inputs
, out object[] outputs
)
29 // Invoke the operation using the inner operation
31 object result
= innerOperationInvoker
.Invoke(instance
,
34 // Save the instance using the storage manager saved in the
35 // current InstanceContext.
36 InstanceContextExtension extension
=
37 OperationContext
.Current
.InstanceContext
.Extensions
.Find
<InstanceContextExtension
>();
39 extension
.StorageManager
.SaveInstance(extension
.ContextId
, instance
);
43 public IAsyncResult
InvokeBegin(object instance
, object[] inputs
,
44 AsyncCallback callback
, object state
)
46 return innerOperationInvoker
.InvokeBegin(instance
, inputs
, callback
, state
);
49 public object InvokeEnd(object instance
, out object[] outputs
, IAsyncResult asyncResult
)
51 // Finish invoking the operation using the inner operation
53 object result
= innerOperationInvoker
.InvokeEnd(instance
, out outputs
, asyncResult
);
55 // Save the instance using the storage manager saved in the
56 // current InstanceContext.
57 InstanceContextExtension extension
=
58 OperationContext
.Current
.InstanceContext
.Extensions
.Find
<InstanceContextExtension
>();
60 extension
.StorageManager
.SaveInstance(extension
.ContextId
, instance
);
64 public bool IsSynchronous
66 get { return innerOperationInvoker.IsSynchronous; }