Доброго всем дня.
Решил написать консольное приложение, чтобы оно обновляло кэш с тайлами.
Сервис с тайлами настроен, запущен.
Вот код:
[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 процессы как работали(не просто запущены, а используют процессор, память) так и работают.
Может кто сталкивался с такой проб