예제 #1
0
        public void AddServantLocator(Ice.IServantLocator locator, string category)
        {
            lock (this)
            {
                Debug.Assert(_communicator != null); // Must not be called after destruction.

                if (_locatorMap.ContainsKey(category))
                {
                    throw new ArgumentException($"A servant locator for category {category} is already registered", nameof(category));
                }

                _locatorMap[category] = locator;
            }
        }
예제 #2
0
        //
        // Only for use by Ice.ObjectAdapterI.
        //
        public void Destroy()
        {
            Dictionary <string, Ice.IServantLocator> locatorMap;

            Ice.ILogger logger;
            lock (this)
            {
                //
                // If the ServantManager has already been destroyed, we're done.
                //
                if (_communicator == null)
                {
                    return;
                }

                logger = _communicator.Logger;

                _servantMapMap.Clear();

                _defaultServantMap.Clear();

                locatorMap = new Dictionary <string, Ice.IServantLocator>(_locatorMap);
                _locatorMap.Clear();

                _communicator = null;
            }

            foreach (KeyValuePair <string, Ice.IServantLocator> p in locatorMap)
            {
                Ice.IServantLocator locator = p.Value;
                try
                {
                    locator.Deactivate(p.Key);
                }
                catch (System.Exception ex)
                {
                    string s = "exception during locator deactivation:\n" + "object adapter: `"
                               + _adapterName + "'\n" + "locator category: `" + p.Key + "'\n" + ex;
                    logger.Error(s);
                }
            }
        }