您的位置:首页 > 其它

一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法

2009-01-12 14:55 381 查看
问题描述:需要在GIS项目中实现多边形查询,将多个坐标传回服务器端当作查询的条件,然后返回查询结果。我们使用AJAX完成这部分操作。

 

而使用AJAX查询数据时,响应回客户端的信息有一定的上限 (即AJAX不能传回大量的数据)。下面给出我的解决方案。

 

      一、使用AJAX将“查询条件”存到服务器端,返回一个令牌(token)。

      二、引入脚本文件,令牌当作参数。脚本文件是通过令牌生成的查询结果。

 

详细实现:

1.buss.js

 

WebService("GISWCFService.svc/ConstructRestQueryLayerUrl", function(obj){
document.body.appendChild(document.createElement('script')).src = "webservice/js.aspx?uuid="+obj;
}, ConstructRestQueryLayerUrlError, { Where: Where, geometry: jsonRestPolygon });

WebService是一个AJAX封装,参数为:WebService(地址,成功时执行的方法,失败时执行的方法,条件); 

 

2.GISWCFService.svc

 

[OperationContract]
[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public string ConstructRestQueryLayerUrl(string Where, string geometry)
{
if (isAuthenticatedUser() == false) { return ""; }//用户验证
string[] str = {Where, geometry};//查询条件存到数组中
string key = System.Guid.NewGuid().ToString();//得到一个TOKEN
Global.GetInstance().Dic.Add(key, str);//将查询条件存到全局变量中
return key;//返回TOKEN给客户端
}


GISWCFService.svc 是一个WCF文件,目的参照其注释。

 

3.Global.cs

 

public class Global
{
private Global() { }

private static Global uniqueGlobal = new Global();
public static Global GetInstance(){
return uniqueGlobal;
}

private Dictionary<String, string[]> dic = new Dictionary<string,string[]>();

public Dictionary<String, string[]> Dic
{
get { return dic; }
set { dic = value; }
}
}


 Global.cs是自定义的一个全局类,用来保存数据。

 

4.js.aspx

 

public partial class js : System.Web.UI.Page
{
private PoliceService policeService = new PoliceService();//实例化查询对象
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Params != null)// 若有参数
{
string key = Request.Params["uuid"].ToString();//得到TOKEN
string[] content = Global.GetInstance().Dic[key];//通过TOKEN取查询条件
string output = policeService.ConstructRestQueryLayerUrl(content[0], content[1]);//查询

Response.Clear();
Response.ClearHeaders();
Response.AppendHeader("content-type", "text/js");
Response.Write("ConstructRestQueryLayerUrlSuccess('" + output + "');");//生成方法
Response.End();
}
}
}


 js.aspx文件目的是生成一个JS文件。我们用他来构建一个方法的调用。

 

 

执行顺序:

1.buss.js的WebService方法提交查询条件给服务器。

2.GISWCFService.svc把条件存到服务器,并且返回一个令牌,方便客户端查找。

3.buss.js的

 

document.body.appendChild(document.createElement('script')).src = "webservice/js.aspx?uuid="+obj;


 调用生成好的JS代码。这一步直接调用结果(类似ConstructRestQueryLayerUrlSuccess('{key, value}');)。

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐