概述
平台:Vs 2010,Blend 4,Silverlight 4
调用API: ArcGis for Silverligth API(ESRI.ArcGIS.Client)
本来准备晚上或下午写的,早上公司服务器挂了,地图服务用不了干脆就来写一点吧!有个朋友问我动态配置 WebService,Wcf服务的问题,正好也把这个一并写了!
好了不说废话了,进下正题。
先来看一下如何动态的配置WebService,Wcf 服务,实现方式:从 Web.Config 文件中读取地址,然后在 Silverlight 实现绑定。
首先我们还是添加服务引用,引用远程或本机的Web服务。然后在 silverlight 加下以下代码
01 | <span style= "font-family: 宋体; font-size: 12pt;" > /// <summary> |
04 | /// <returns></returns> |
05 | public Service.TyphoonServiceSoapClient GetDynamicClient() |
07 | BasicHttpBinding binding = new BasicHttpBinding( |
08 | Application.Current.Host.Source.Equals( "https" ) ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None); |
10 | binding.MaxReceivedMessageSize = int .MaxValue; |
11 | binding.MaxBufferSize = int .MaxValue; |
14 | EndpointAddress client; |
15 | if (webServicePath == String.Empty) |
19 | ScriptObject myScript = HtmlPage.Window.GetProperty( "GetWebServiceUrl" ) as ScriptObject; |
20 | webServicePath = myScript.InvokeSelf( "TyphoonSL" ).ToString(); |
22 | client = new EndpointAddress(webServicePath); |
26 | client = new EndpointAddress( "http://localhost:7629/TyphoonService.asmx" ); |
31 | client = new EndpointAddress(webServicePath); |
34 | return new Service.TyphoonServiceSoapClient(binding, client); |
注意把 public Service.TyphoonServiceSoapClient GetDynamicClient() 这行改成你自己的服务实例也就是改 Service.TyphoonServiceSoapClient,
同样也要改最后一行的 return new Service.TyphoonServiceSoapClient(binding, client);
大家可能注意到上面的两句话。
ScriptObject myScript = HtmlPage.Window.GetProperty("GetWebServiceUrl") as ScriptObject;
webServicePath = myScript.InvokeSelf("TyphoonSL").ToString();
这里的 HtmlPage.Window.GetProperty("GetWebServiceUrl"),表示外部 JavaScript 方法,也就是承载 Silverlight 页面中的JavaScript函数。
webServicePath是一个全局的string型变量,是用来保存WebService地址。
myScript.InvokeSelf("TyphoonSL").ToString();是表示调用外部JavaScript方法并传一个值"typhoonSL"进去.
好Silverlight程序里大功告成,我们看下承载 Silverlight 页面中的JavaScript函数。
01 | <span style= "font-family: 宋体; font-size: 12pt;" ><script type= "text/javascript" > |
03 | function GetWebServiceUrl(args) { |
06 | if (args.toString() == 'TyphoonSL' ) { |
07 | a = '<%=GetAppSetting("TyphoonSL")%>' ; |
里面有个托管代码函数GetAppSetting();我们看下他的代码:
01 | <span style= "font-family: 宋体; font-size: 12pt;" > /// <summary> |
04 | /// <param name="key">字段名称</param> |
05 | /// <returns>配置字串</returns> |
06 | public static string GetAppSetting( string key) |
12 | return System.Configuration.ConfigurationSettings.AppSettings[key].ToString(); |
我们看他了他调用了ConfigurationSettings.AppSetting中的key.那再来看下他调用的Web.Config文件中的节点:
1 | <span style= "font-family: 宋体; font-size: 12pt;" ><appSettings><add key= "TyphoonSL" value= "http://localhost:7629/TyphoonService.asmx" /<span style= "line-height: 17px;" >></appSettings></span></span> |
这样动态的WebService、Wcf调用就完成了!
然后就是动态调用地图,其实和动态调用WebService、Wcf差不多。我简单发下他们的代码:
01 | <span style= "font-family: 宋体; font-size: 12pt;" > /// <summary> |
04 | private void TiledLayerInit() |
06 | ArcGISTiledMapServiceLayer tiledLayer = new ArcGISTiledMapServiceLayer(); |
07 | ArcGISTiledMapServiceLayer imageLayer = new ArcGISTiledMapServiceLayer(); |
10 | ScriptObject myScr = HtmlPage.Window.GetProperty( "GetSLTiledLayer" ) as ScriptObject; |
11 | string url = myScr.InvokeSelf( "TiledLayer" ).ToString(); |
16 | MessageBox.Show( "请配置 Gis 底图!" + ex.ToString(), "温馨提示" , MessageBoxButton.OK); |
22 | imageLayer.Url = "http://services.arcgisonline.com/ArcGIS/rest/services/NGS_Topo_US_2D/MapServer" ; |
24 | tiledLayer.ID = "StreetMapLayer" ; |
25 | imageLayer.ID = "ImageMapLayer" ; |
27 | myMap.Layers.Add(tiledLayer); |
28 | myMap.Layers.Add(imageLayer); |
30 | myMap.Layers[ "ImageMapLayer" ].Visible = false ; |
我的代码里调用了两个地图层,两个都是 ArcGisTiledMapServiceLayer, 这是切片的ArcGis地图服务,也就是把图片切成一块一块,然后下载到客户端来显示。
我们同样看到了 HtmlPage.Window.GetProperty("GetSLTiledLayer") as ScriptObject; 这行代码来调用外部 JavaScript 代码来获取切片服务的 Url。
设置了tiledLayer和imageLayer的Url后我们再设置下他们的 ID号,然后在我们的 Map实例中(也就是myMap)把他们加到地图层上来,然后这两个层就显示在地图上了。
继续看承载页面JavaScript代码:
01 | <span style= "font-family: 宋体; font-size: 12pt;" > <script type= "text/javascript" > |
04 | function GetSLTiledLayer(key) { |
05 | if (key.toString() == 'TiledLayer' ) { |
06 | var a = '<%=GetAppSetting("TiledLayer")%>' ; |
GetAppSetting方法和上面给出的托管代码一样。
Web.Config中的配置:
1 | <span style= "font-family: 宋体; font-size: 12pt;" ><appSettings> |
2 | <add key= "TiledLayer" value= "http://bbs.gao00.com/ArcGIS/rest/services/Map001/World/MapServer" /> |
3 | <add key= "TyphoonSL" value= "http://localhost:7629/TyphoonService.asmx" /> |
这时候我们就把动态服务和动态地图都配置好了!
最后
以上就是温柔芒果为你收集整理的ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务的全部内容,希望文章能够帮你解决ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复