internal bool CanUnload(InstanceContext instanceContext) { if (InstanceContextProviderBase.IsProviderSingleton(instanceContextProvider)) { return(false); } if (InstanceContextProviderBase.IsProviderPerCall(instanceContextProvider) || InstanceContextProviderBase.IsProviderSessionful(instanceContextProvider)) { return(true); } //User provided InstanceContextProvider. Call the provider to check for idle. if (!instanceContextProvider.IsIdle(instanceContext)) { instanceContextProvider.NotifyIdle(InstanceContext.NotifyIdleCallback, instanceContext); return(false); } return(true); }
void TransferChannelFromPendingList(MessageRpc rpc) { if (rpc.Channel.IsPending) { rpc.Channel.IsPending = false; ChannelDispatcher channelDispatcher = rpc.Channel.ChannelDispatcher; IInstanceContextProvider provider = InstanceBehavior.InstanceContextProvider; if (!InstanceContextProviderBase.IsProviderSessionful(provider) && !InstanceContextProviderBase.IsProviderSingleton(provider)) { IChannel proxy = rpc.Channel.Proxy as IChannel; if (!rpc.InstanceContext.IncomingChannels.Contains(proxy)) { channelDispatcher.Channels.Add(proxy); } } // TODO: Do we need to keep track of pending channels with the new hosting model? //channelDispatcher.PendingChannels.Remove(rpc.Channel.Binder.Channel); } }