Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MapPoint 2011 COM可扩展?_C#_Com_Map_Scalability_Mappoint - Fatal编程技术网

C# MapPoint 2011 COM可扩展?

C# MapPoint 2011 COM可扩展?,c#,com,map,scalability,mappoint,C#,Com,Map,Scalability,Mappoint,我的任务是编写一个web服务,该服务可以从我们的两个工厂地点之一调用,这将使我们的运输部门能够获得一组交货的最有效路线。我们还讨论了建立地区并将货物分配给地区和司机的可能性 我最简单的问题是:MapPoint2011允许您通过COM使用其对象模型。我对这种类型的编程不太熟悉,但似乎每次调用逻辑时都会创建一个新的应用程序实例。这种类型的使用是可伸缩的吗?如果同时接到10个电话,会发生什么情况 我在下面提供了一些从MSDN中提取的示例代码作为参考 //set up application MapPo

我的任务是编写一个web服务,该服务可以从我们的两个工厂地点之一调用,这将使我们的运输部门能够获得一组交货的最有效路线。我们还讨论了建立地区并将货物分配给地区和司机的可能性

我最简单的问题是:MapPoint2011允许您通过COM使用其对象模型。我对这种类型的编程不太熟悉,但似乎每次调用逻辑时都会创建一个新的应用程序实例。这种类型的使用是可伸缩的吗?如果同时接到10个电话,会发生什么情况

我在下面提供了一些从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();

不,它是不可伸缩的,这是一个非常糟糕的主意。在服务器环境中运行任何严重依赖桌面会话(如MapPoint 2011)的程序都会出现问题,这主要是因为桌面会话不可用

此外,像这样的桌面应用程序不是为服务器环境开发的,所以它们消耗资源的方式与您预期的不同(而且通常更积极)

在您的情况下,如果您同时收到十个呼叫,那么您的服务器上将运行十个应用程序实例(然后关闭,但仍然如此)。对于这种类型的应用程序,这通常是不可扩展的


MapPoint 2011与Office属于同一类别,因为它不应该在服务器环境中运行,正如所说。

@casperOne是正确的,这是一个坏主意。您所说的是1-2个位置,因此这里有两种其他方法:

首先,为什么不在您使用的4-5台机器上本地安装并运行MapPoint?在本地进行路由选择

其次,MapPoint有一个ActiveX控件。这可以嵌入到web应用程序中,但您必须在每台客户端PC上拥有许可的MapPoint应用程序

否则,我认为您正在寻找在线服务。Bing地图也很不错;如果在你的业务范围内,OpenStreetMaps的数据质量足够的话,那么它总是存在的

如果你想保存地图

你会如何以编程的方式说“不”


使用给定的代码,您将启动MapPoint的10个实例。是的,那不能很好地扩展。您可以自己序列化查询,以减轻这种打击,降低服务速度,但至少不会让机器崩溃。微软一般不建议在服务器场景中使用其桌面应用程序。我认为是这样,但我希望不是这样。在C#中很难找到一个编程解决方案来完成我们需要它做的一切。@JamesHill:我不知道是这样的,我想你可能问错了问题。相反,您应该询问有哪些服务器解决方案可以满足您的需要。在您的示例中,您似乎希望找到给定航路点的路线。这就是说,政府正是这样做的(请参阅。找到您需要的其他功能应该不难。我应该澄清一下。在我们的预算范围内找到解决方案是困难的。例如,谷歌地图API在企业内部网上的使用起价为17500美元。@JamesHill:只是好奇,您将获得更多?不,我们没有失败。我们在这里失败:
内部部署
和此处的
嵌入软件和应用程序,收费

 objApp.ActiveMap.saved = true