使用代理请求Geoserver服务
来源:互联网 发布:mac快捷键重启 编辑:程序博客网 时间:2024/05/02 04:42
1、使用代理的目的
1) 当使用Geoserver作为GIS后台服务开发WebGIS应用时,如果在外网环境中,那么Geoserver也必须部署在外网环境中。Geoserver负责图层发布与修改,暴露在外网环境下,存在一定的安全隐患。因此使用代理的方式间接访问Geoserver,使Geoserver部署在局域网内,可以提高安全性。这和数据库一般部署在局域网环境下是相同的道理。
2) Geoserver的WFS请求不允许跨域,虽然可以通过JSONP、CORS等方式实现跨域请求,使用代理请求WFS仍然是一个不错的方式。
2、设计代理层的思路
1) 应兼容Geoserver的WMS、WFS等协议格式;
2)前端页面无须做额外的修改。
下述代码中,前端页面将geoserver的地址修改为代理层地址即可:
var partLayerTiled = new ol.layer.Tile({ visible: true, source: new ol.source.TileWMS({ url: '/GeoserverWmsProxy.ashx', // 'http://localhost:8080/geoserver/szgas/wms', params: { 'FORMAT': format, 'VERSION': '1.1.1', tiled: true, STYLES: '', LAYERS: 'szgas:MVALVE',//部件图层 }, }), //从第4级开始加载部件图层; maxResolution: resolutions[3], });
3、代理层参考代码(c#实现)
代理层基类:
public abstract class GeoserverBaseProxy : IHttpHandler { protected abstract string GeoserverUrl { get; } public void ProcessRequest(HttpContext context) { string targetUrl = GeoserverUrl; for (int i = 0, count = context.Request.QueryString.Count; i < count; i++) { targetUrl += context.Request.QueryString.Keys[i] + "=" + context.Request.QueryString.Get(i) + "&"; } HttpWebRequest targetRequest = (HttpWebRequest)WebRequest.Create(targetUrl); targetRequest.UserAgent = context.Request.UserAgent; targetRequest.ContentType = context.Request.ContentType; targetRequest.Method = context.Request.HttpMethod; byte[] buffer = new byte[8 * 1024]; int bufferLength = 8 * 1024; int ret = 0; if (targetRequest.Method.ToUpper() == "POST") { Stream targetInputStream = targetRequest.GetRequestStream(); ret = context.Request.InputStream.Read(buffer, 0, bufferLength); while (ret > 0) { targetInputStream.Write(buffer, 0, ret); ret = context.Request.InputStream.Read(buffer, 0, bufferLength); } targetInputStream.Close(); } HttpWebResponse targetResponse = (HttpWebResponse)targetRequest.GetResponse(); context.Response.ContentType = targetResponse.ContentType; Stream targetOutputStream = targetResponse.GetResponseStream(); Stream sourceOutputStream = context.Response.OutputStream; ret = targetOutputStream.Read(buffer, 0, bufferLength); while (ret > 0) { sourceOutputStream.Write(buffer, 0, ret); ret = targetOutputStream.Read(buffer, 0, bufferLength); } targetResponse.Close(); } public bool IsReusable { get { return false; } } }
WMS服务代理:
public class GeoserverWmsProxy : GeoserverBaseProxy { const string __geoserverUrl = "http://localhost:8080/geoserver/szgas/wms?"; protected override string GeoserverUrl { get { return __geoserverUrl; } } }
WFS服务代理:
public class GeoserverWfsProxy : GeoserverBaseProxy { const string __geoserverUrl = "http://localhost:8080/geoserver/szgas/wfs?"; protected override string GeoserverUrl { get { return __geoserverUrl; } } }
Geowebcache切片服务代理:
public class GeoserverGwcProxy : GeoserverBaseProxy { const string __geoserverUrl = "http://localhost:8080/geoserver/gwc/service/wms?"; protected override string GeoserverUrl { get { return __geoserverUrl; } } }
请将上述代码中Geoserver的地址修改为读取配置项。
0 0
- 使用代理请求Geoserver服务
- 如何使用GeoServer发布WMS服务
- Ajax POST请求调用Geoserver的WFS服务
- 使用AWS服务和Geoserver创建免费云GIS:安装Geoserver到AWS Free Usage Tier
- GeoServer基础教程(五):使用GeoServer和OpenLayers发布地图服务
- 使用OpenLayers3对接geoserver的WPS服务完成叠加分析
- Geoserver发布metro服务
- geoserver wmts服务叠加
- geoserver-ows服务扩展
- GeoServer发布地图服务
- GeoServer发布地图服务
- geoserver服务引擎解析
- geoserver发布wms服务
- .net HttpWebRequest使用代理请求
- 使用GeoServer发布shp数据为WMS服务和WFS服务(图文教程)
- 使用GeoServer发布shp数据为WMS服务和WFS服务
- geoserver关于服务迁移问题
- GeoServer发布wms服务--实验
- 【洛谷】3384 【模板】树链剖分
- 增强JavaScript性能之优化页面加载时间
- 滔滔吃苹果
- Android中viewpage的实现
- 作为依赖的工程如何intent到主工程中?
- 使用代理请求Geoserver服务
- PHP函数之日期时间函数date()使用详解
- 个人小记
- 函数中new的内存的释放实例
- 单例模式的几种实现方法
- IPv6数据报头部格式
- GLSL 学习
- 在Linux操作系统下,安装GI 12.1 或者升级到GI 12.1时遇到的问题
- 珠心算测试(c++版)