Pārlūkot izejas kodu

handle IsTerminating.

Atsushi Eno 15 gadi atpakaļ
vecāks
revīzija
0351f32bb8

+ 1 - 0
mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/EndpointDispatcher.cs

@@ -153,6 +153,7 @@ namespace System.ServiceModel.Dispatcher
 				od.IsOneWay ?
 				new DispatchOperation (db, od.Name, reqA) :
 				new DispatchOperation (db, od.Name, reqA, resA);
+			o.IsTerminating = od.IsTerminating;
 			bool no_serialized_reply = od.IsOneWay;
 			foreach (MessageDescription md in od.Messages) {
 				if (md.IsRequest &&

+ 4 - 3
mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/FinalizeProcessingHandler.cs

@@ -15,10 +15,11 @@ namespace System.ServiceModel.Dispatcher
 		}
 
 		void FinishRequest (MessageProcessingContext mrc)
-		{				
-			if (mrc.Operation != null &&  mrc.Operation.ReleaseInstanceAfterCall) {
+		{
+			if (mrc.Operation != null &&  mrc.Operation.IsTerminating && mrc.OperationContext.Channel.InputSession != null)
+				mrc.OperationContext.Channel.Close (); // FIXME: timeout?
+			if (mrc.Operation != null &&  mrc.Operation.ReleaseInstanceAfterCall)
 				mrc.InstanceContext.ReleaseServiceInstance ();
-			}
 			mrc.InstanceContext.CloseIfIdle ();			
 		}
 	}