.net访问geoserver发布的wms跨域问题解决方案-创新互联

环境:  服务器  geoserver2.4.1

目前创新互联建站已为上千多家的企业提供了网站建设、域名、雅安服务器托管绵阳服务器托管、企业网站设计、清水网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

开发机访问服务器发布的wms 存在跨域问题,研究两天终于找到解决方案。

主要思路是: 使用jquery的ajax 代替Groserver的request, 然后将wms的请求地址转发到.net的处理程序, 使用.net的处理程序进行跨域处理。

 function mouseClick(e) {
            var layer = new Array();
            layer = map.getLayersByName("Simple_Geometry");
            if (layer != null)
                for (var i = 0; i < layer.length; i++) {
                    map.removeLayer(layer[i]);
                }
                
            var wms_url = "http://10.72.4.219:8089/geoserver/xj/wms?";
            var params =
                     {
                         REQUEST: "GetFeatureInfo",
                         BBOX: map.getExtent().toBBOX(),
                         WIDTH: map.size.w,
                         HEIGHT: map.size.h,
                         X: e.xy.x,
                         Y: e.xy.y,
                         SERVICE: "WMS",
                         QUERY_LAYERS: map.layers[0].params.LAYERS,
                         INFO_FORMAT: 'text/html',
                         FEATURE_COUNT: 50,
                         Layers: 'xj:cswl_group',
                         Styles: "",
                         format: "application/vnd.ogc.gml",
                         EXCEPTIONS: "application/vnd.ogc.se_xml",                    // Exception 类型
                         srs: 'EPSG:4326'

                     };
                     var domainUrl = "crossDomain.ashx?URL=";
                     var request = parpreUrl(wms_url, params);
                     request = encodeURIComponent(encodeURIComponent(request));

                     $.post(domainUrl + request, "", function (e) {
                         document.getElementById('nodelist').innerHTML = e;
                     });
                    
            OpenLayers.Event.stop(e);
        }

        function parpreUrl(url, paramsObj) {
            for (var k in paramsObj) {
                url += (k + "=" + paramsObj[k] + "&");
                
            }
            return url;
        }

如果使用Groserver.ProxyHost , 会遇到 triggerEvent未定义问题,所以使用了jqueyr的ajax代替 Geoserver.Request ,另外

 public void Proce***equest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            string url = "";
            url = context.Request.QueryString["URL"].ToString();
            url = context.Server.UrlDecode(url);
            HttpWebRequest loHttp = (HttpWebRequest)WebRequest.Create(url);
            loHttp.Timeout = 10000;     // 10 secs
            loHttp.UserAgent = "Web Client";
            HttpWebResponse loWebResponse = (HttpWebResponse)loHttp.GetResponse();
            Encoding enc = Encoding.GetEncoding(65001);
            StreamReader loResponseStream = new StreamReader(loWebResponse.GetResponseStream(), enc);
            string lcHtml = loResponseStream.ReadToEnd();
            context.Response.Write(lcHtml);
            loWebResponse.Close();
            loResponseStream.Close();
        }

这样就可以解决 跨域问题

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:.net访问geoserver发布的wms跨域问题解决方案-创新互联
分享路径:http://scyanting.com/article/ddopdi.html