проблема программно обновить кэш тайлового сервиса

0 голосов
спросил 08 Дек, 09 от filippov70 (5,320 баллов) в категории Программные продукты Esri
Доброго всем дня.
Решил написать консольное приложение, чтобы оно обновляло кэш с тайлами.
Сервис с тайлами настроен, запущен.
Вот код:
[STAThread]
        static void Main(string[] args)// я параметры передаю в аггументах
        {
            string scales = "";//"100000;50000;25000;23000;20000;18000;16000;15000;12000;10000;9000;8000;6000;5000;3000;2000;1000;500;250;100";
            string Server = "";// "localhost";
            string Service = "";//"work"
            string Frame = "";//"Layers"

            scales = args[3];
            Server = args[0];
            Service = args[1];
            Frame = args[2];


            IServerContext serverContext = null;

            try
            {
              
                GISServerConnection serverConnection;
                serverConnection = new GISServerConnection();
                serverConnection.Connect(Server);
                IServerObjectManager serverManager = serverConnection.ServerObjectManager;

                serverContext = serverManager.CreateServerContext("", "");
               
                ESRI.ArcGIS.Geoprocessor.Geoprocessor gp = new ESRI.ArcGIS.Geoprocessor.Geoprocessor(serverContext);

               
                if (gp.IServerContext != null)
                {
                    IGPProcess proc = new ManageMapServerCacheTiles(Server, Service, Frame, (object)"", (object)scales, "Recreate All Tiles");
                 
                    if (proc != null)
                    {

                        DateTime start = DateTime.Now;
                        Console.WriteLine("Начало " + start.ToString());
                        object retEx = gp.Execute(proc, null);
                            //if(retEx == null)
                            //    Console.WriteLine("Выполнение null");

                        DateTime end = DateTime.Now;
                        TimeSpan result = end - start;
                        Console.WriteLine("Завершено " + end.ToString());
                        Console.WriteLine("Время обновления " + result.Minutes.ToString() + " минут.");
                       
                    }
                    proc = null;

                }
                else
                {
                    ;
                }
                gp = null;
               

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                //serverContext.ReleaseContext();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(serverContext);

            }
        }

Работает 10 минут, сильно напрягая ArcSOC процессы.
если использовать serverContext.ReleaseContext(); , кстати как в примере от ESRI, то выходит эксепшн: Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
Брандмауэр выключен, служба RPC запущена и работает. Я с админскими правами.

Нашел решение: System.Runtime.InteropServices.Marshal.ReleaseComObject(serverContext);, но в этом случае ArcSOC процессы как работали(не просто запущены, а используют процессор, память) так и работают.

Может кто сталкивался с такой проб

1 Ответ

0 голосов
ответил 11 Янв, 10 от filippov70 (5,320 баллов)
если кому интересно, то это БАГ не только для питона, это всеобщий БАГ и исправлен только в 9.3.1
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...