Масштабируемость MapPoint 2011 COM?

Мне поручили написать веб-службу, которую можно вызывать из одного из двух наших заводов, что позволит нашему отделу доставки получить наиболее эффективный маршрут для набора поставок. Также мы обсудили возможность настройки территорий и закрепления доставки на территории и территории за водителями.

Мой вопрос в самой простой форме таков: MapPoint 2011 позволяет вам использовать свою объектную модель через COM. Я не очень хорошо знаком с этим типом программирования, но кажется, что он создает новый экземпляр приложения каждый раз, когда вызывается логика. Является ли этот тип использования масштабируемым? Что произойдет, если десять вызовов будут получены одновременно?

Я включил пример кода из MSDN ниже в качестве точки отсчета.

//set up application
MapPoint.Application objApp = new Application();
objApp.Visible = false;
objApp.UserControl = false;

MapPoint.Route objRoute;
MapPoint.Map objMap;

objMap = objApp.ActiveMap;
objRoute = objMap.ActiveRoute;

objMap.Parent.PaneState = MapPoint.GeoPaneState.geoPaneRoutePlanner;

//Get locations for route
object item = 1;
objRoute.Waypoints.Add(objMap.FindResults("Redmond, WA").get_Item(ref item), 
    "Redmond, WA");
objRoute.Waypoints.Add(objMap.FindResults("Seattle, WA").get_Item(ref item), 
    "Seattle, WA");
objRoute.Waypoints.Add(objMap.FindResults("Portland, OR").get_Item(ref item), 
    "Portland, OR");

// Calculate the route
objRoute.Calculate();

//Asks if you want to save the map? How would you say no programmatically?
objApp.Quit();

person James Hill    schedule 07.11.2011    source источник
comment
С данным кодом вы запустите 10 экземпляров MapPoint. Да, это не будет хорошо масштабироваться. Вы можете сериализовать запросы самостоятельно, чтобы уменьшить этот удар, замедлив работу службы, но, по крайней мере, не заставив машину упасть. Microsoft вообще не рекомендует использовать свои настольные приложения в серверном сценарии.   -  person Hans Passant    schedule 07.11.2011


Ответы (3)


Нет, это не масштабируемо, и это очень плохая идея. Запуск любой программы, которая сильно зависит от сеанса рабочего стола (например, MapPoint 2011) в серверной среде, вызывает проблемы, в основном из-за того, что сеанс рабочего стола недоступен.

Кроме того, настольные приложения, подобные этому, не разрабатываются для серверных сред, поэтому они потребляют ресурсы иначе (и обычно более агрессивно), чем можно было бы ожидать.

В вашем случае, если вы получите десять вызовов одновременно, то у вас будет десять экземпляров приложения, запущенных на вашем сервере (а затем завершивших работу, но все же). Как правило, это не масштабируется для приложений этого типа.

MapPoint 2011 относится к той же категории, что и Office, в том смысле, что его нельзя запускать в серверной среде согласно Microsoft. собственная рекомендация.

person casperOne    schedule 07.11.2011
comment
Я предполагал, что это так, но надеялся, что это не так. Трудно найти программное решение на C#, которое будет делать все, что нам нужно. - person James Hill; 07.11.2011
comment
@JamesHill: я не знаю, что это так, и я думаю, что вы, возможно, задаете неправильный вопрос. Вместо этого вы должны спросить, какие существуют серверные решения, которые могут делать то, что вам нужно. В вашем примере вы, кажется, хотите найти маршруты с заданными путевыми точками. Тем не менее, API маршрутов Google точно это (см. Использование путевых точек в маршрутах). другой необходимый вам функционал не должен вызвать затруднений. - person casperOne; 07.11.2011
comment
Я должен уточнить. Найти решение в рамках нашего бюджета сложно. Например, Google Maps API стоит от 17 500 долларов США за корпоративное использование в интрасети. - person James Hill; 07.11.2011
comment
@JamesHill: Просто любопытно, вы собираетесь делать более 2500 запросов в день с более 10 путевых точек на запрос? - person casperOne; 07.11.2011
comment
Нет, здесь мы не ошибаемся. Мы ошибаемся здесь: Internal deployments и здесь Embedding in software and applications for fee - person James Hill; 07.11.2011

@casperOne прав, что это плохая идея. Вы говорите об 1-2 локациях, так что вот еще два подхода:

Во-первых, почему бы не установить и не запустить MapPoint локально на 4-5 машинах, которые вы используете? Делайте маршрутизацию локально.

Во-вторых, MapPoint имеет элемент управления ActiveX. Это может быть встроено в веб-приложение, НО у вас должны быть лицензированные приложения MapPoint на каждом клиентском ПК.

в противном случае я думаю, что вы смотрите на онлайн-сервис. Карты Bing тоже хороши; и всегда есть OpenStreetMaps, если качество их данных достаточно в вашей области деятельности.

person winwaed    schedule 08.11.2011

Если вы хотите сохранить карту?

Как бы вы сказали нет программно?

 objApp.ActiveMap.saved = true
person justcoding121    schedule 16.03.2012