.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();
}这样就可以解决 跨域问题
文章标题:.net访问geoserver发布的wms 跨域问题解决方案
路径分享:http://www.jxjierui.cn/article/gpissc.html


咨询
建站咨询
