• Flex RIA的ArcIMS WebGIS之路(三)通过Asp.net数据库的访问,不是WebService哦!


    做ArcIMS不能离开SDE,用上SDE不能不访问数据库。Flex访问数据还算方便,访问数据库那个麻烦啊!总的来说.Net平台解决方案有WebService与Remoting,对于在内网或者VPN的情况下Remoting效率还算可以,不过做起来罗嗦还有发布问题。一般来说使用WebService的比较多,但是WebService的效率实在不敢恭维,今天Flex重点还是放在另外一条思路上--Asp.net,今天比较郁闷由于地图数据迁移到Oracle上搞了半天才有时间照顾Flex进展,原来的中文图层名与字段换成了英文,用IMS访问看来是拿不到中文了,还好在数据库中定义了中英文的图层名与字段对照表,可以通过Flex访问数据库来弥补,如果用WebService的话不可避免的长时间的buzyCursor,再看看访问IMS服务器的时候使用UrlRequest就能发送数据还能获取结果,效率似乎不错,于是就想起来自己写几个Asp.net页面,通过Asp.net访问数据库(好亲切的DAAB啊).
    废话不多罗嗦了,首先写个asp.net网页,访问一个Oracle数据库。
    在web.config中添上一段,用来给DAAB读取数据库配置
    <connectionStrings>
      <add name="PC_Ora" connectionString="Data Source=gisdata;User Id=***;Password=***" providerName="System.Data.OracleClient"/>
     </connectionStrings>
    新建一个页面,在PageLoad里面写上
    Database db = DatabaseFactory.CreateDatabase( "PC_Ora" );
            StreamReader sr = new StreamReader( this.Request.InputStream );
            string tbName = sr.ReadToEnd();
            string sqlGetLayerInfo = "select TABCAP from sys_tabname t where UPPER(t.tabname) like '" + tbName.ToUpper() + "'";
            IDataReader dr = db.ExecuteReader( CommandType.Text, sqlGetLayerInfo );
            this.Response.ContentType = "text/xml";
            while ( dr.Read() )
            {
                Response.Write( dr[0].ToString() );
            }
    这样查询的数据就能够写到页面里面了
    怎么拿到呢?
    万能的URLRequest登场了
    不多说在通过ArcIMS获取图层名称时候
    public function set Name(na:String):void
      {
       this.name = na;
       var capReq:URLRequest = new URLRequest();
       capReq.url = "http://10.25.2.45/webwork/FlexDataService/GetData.aspx"; 
       capReq.method ="POST";
       capReq.data = na;
       var urlLoader:URLLoader = new URLLoader();
       urlLoader.addEventListener(Event.COMPLETE, layerCompleteHandler);
       try {
                    urlLoader.load(capReq);
                } catch (error:Error) {
                    mx.controls.Alert.show("发送请求错误","ASP.Net请求",4,null);
                }
      }
    以上的IP是内网地址,不要访问
    C#代码中的
     StreamReader sr = new StreamReader( this.Request.InputStream );
            string tbName = sr.ReadToEnd();
    得到的结果自然就是ActionScript代码中na的值了
    下面就不用多说了吧,像访问IMS那样拿出dada,解析就能获得数据了
    private function layerCompleteHandler(event:Event):void
      {
                var loader:URLLoader = URLLoader(event.target);
                var st:String = loader.data;
                this.caption = st.substr(0, st.indexOf("\r"));
                var fldReq:URLRequest = new URLRequest();
    }注意要"\r",如果完全取出data,就包含了html代码了。
    总的说来这种方式比WebService方式要快不少,但是对于批量数据怎么办?比如属性表什么的,看来还是得WebService或者能利用Asp.net通过DataSet的XML来走,还没有尝试。终于界面上看不到E文了。
    突然发现,我的图层树只能显示图层名称,这个可不行,怎么说图层控制和菜单还是要的,如何实现TOC呢,请看下一期的Flex RIA的ArcIMS WebGIS之路--Flex自定控件实现图层TOC

    ps:这一期其实早就写了一部分,由于比较忙落下了。一次偶然搜索资料的时候,看到有位校友,可能是师弟吧转载了前两期。吼吼,欢迎大家评论!

  • 相关阅读:
    Hystrix使用说明,配置参数说明
    服务限流 -- 自定义注解基于RateLimiter实现接口限流
    Java生产环境下问题排查
    Java垃圾回收(GC)机制详解
    RabbitMQ如何解决各种情况下丢数据的问题
    JWT如何在Spring Cloud微服务系统中在服务相互调时传递
    LeetCode 117th Weekly Contest 总结
    系统设计总结
    单调栈总结
    LeetCode 116th Weekly Contest 总结
  • 原文地址:https://www.cnblogs.com/Brune/p/592690.html
Copyright © 2020-2023  润新知