zoukankan      html  css  js  c++  java
  • 错误备忘_ArcGIS_MatLab_ArcGIS 和 MatLab 集成时权限问题造成 MatLab 做图抛出系统内存错误

    本文内容

    • 背景
    • 开发环境
    • 错误表现
    • 错误分析
    • 解决方案

    背景

    08 年毕业时,参加一个项目,由好几家公司共同开发,我们公司做数据仓库部分,包括建立数据仓库和开发之上的数据仓库管理系统。其中,我们公司将 OLAP 分析子系统包给了一个大学,之后再进行系统集成。OLAP 子系统包含用 ArcGIS 开发的地理信息展示和用 MatLab 开发做图分析功能等。

    开发环境

    开发环境:

    • 客户端:Windows 2003 Server、IE 6+、VS 2005、MatLab 2009b
    • 服务器端:Windows 2003 Server、IIS 6、ArcGIS SDE 9.3.2、MatLab 2009b runtime

    错误表现

    当 Web 应用程序同时涉及 GIS 和 MatLab 开发时,MatLab 做图时会抛出系统内存异常错误,该错误不可再现。如果抛出此错误,则之后虽然也可做图,但将始终出现该错误提示窗口。而 GIS 应用程序运行正常。

    错误分析

    起初认为是 MatLab 自己的 BUG,毕竟这个程序太大了,跟 GIS 有得拼,于是反编译 MatLab 的核心 dll 文件,希望通过研究它的底层实现来规避这个问题。还对 IIS 进行了各种设置,也不能解决该问题——系统集成是件痛苦的事,有太多不可预知的问题出现。

    再后来,认为 GIS 和 MatLab 有冲突,但是冲突在什么地方,不得而知。

    解决方案

    发现问题的所在,有点巧合。既然 GIS 部分的应用程序没问题,那就先不管它。把 MatLab 应用程序独立出来,再删掉 Web.config 文件中关于 GIS 的所有配置,但运行时,还是报错,调试来调试去,设置来设置去,还是不好使……最终,我查看了 machine.config 文件,既然该文件对 Web 应用程序来说,是“大环境”,那留点最基本的就好了,就无意间删掉了 <identity impersonate="true" userName="主机名\用户名" password="密码"/> 小节。还在研究时,突然同事说:“好使了!”,惊异地看着我说:“你改什么东西?”我当时一顿回忆……根据时间点,应该是 identity 小节。于是,立刻意识到,也许问题真在这里……

    我们知道,

    1. 在页面上显示底图,并将图层数据叠加到底图上。访问空间数据库 ArcSDE 需要权限。此过程,ArcGIS 会在 Web.config 文件中自动添加 <identity impersonate="true" userName="主机名\用户名" password="密码"/> 小节;
    2. machine.config 和 Web.config 文件,前者是针对一台 Web 服务器,后者是针对某个 Web 应用程序。一台 Web 服务器可以有多个 Web 应用程序。machine.config 文件会作用在所有 Web 应用程序上。

    而原因正是在 <identity impersonate="true" userName="主机名\用户名" password="密码"/> 这句话,虽然 GIS 需要,但是 MatLab 完全不需要,有这个小节 MatLab 做图时反而抛出异常。知道问题所在后,解决就很简单了。

    • 首先,取保 machine.config 文件不配置该节,干净点;
    • 其次,将 Web 应用程序中的 GIS 部分和 MatLab 部分,其一拆成另一个 Web 应用程序,并将其改成虚拟目录,集成在一起。
  • 相关阅读:
    django修身大法之一阳指
    django修身大法之归天心法
    事务(转账功能)
    el技术,,,,,JSTL技术,,,,,javaEE的开发模式
    DBUtils
    Jquery的Ajax
    实例_一个CSS开门动画
    js_快速判断浏览器是否是IE9以下版本浏览器
    html5_通过网页添加QQ或者加入QQ群
    html5_video&audio的autoplay属性失效的解决方法
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2300191.html
Copyright © 2011-2022 走看看