Silverlight获取WebHost配置信息--WebClient和XmlSerializer模拟

 在我们的silverlight项目中,是被打包为xap zip文件下载到客户端,所以silverlight中的app配置文件我们不能直接修改,而在其宿主web host中的web.config在服务端我们也不能直接访问。在我们的项目中遇见了这个问题所以我就有了此博客。

   先说明解决这个问题的方案有:

1:调用wcf,webservice,Asp.net页面等服务端数据源,异步显示在我们的UI。

2:利用silverlight项目的宿主页面 object,传入初始化参数,在silverlight app中获取。

上面的方案都是针对于我们的少量有限配置信息的获取。我这里做的是利用在服务端的xml配置文件来模拟配置文件(为什么不用web.config?以为存在权限信息的问题,所以我觉得尽量避免此文件信息暴露)。在silverlight的异步加载xml文档并解析xml文档。形成配置信息。

为了全局使用,早些加载xml文档,我们需要在app中加一句:

SLConfigManager.Current.ConfigPath = "../SlConfig.xml";//配置文件的路径,相对于我们的xap文件路径。

我们先看一下测试xml:

复制代码
<? xml version="1.0" encoding="utf-8"  ?>  
< Configuration >  
  
< appSettings >  
    
< add  key ="test1"  value ="123" ></ add >  
    
< add  key ="test2"  value ="1" ></ add >  
  
</ appSettings >  
  
< Class  ClassID ="111" >  
    
< Student  Age ="123" >  
      
< Name > ddddd </ Name >      
    
</ Student >  
    
< Student   Age ="28" >  
      
< Name > 111 </ Name >      
    
</ Student >  
  
</ Class >  
</ Configuration >
复制代码

这是我们可以使用:

复制代码
void  Page1_Loaded( object  sender, RoutedEventArgs e) 
     { 
         MessageBox.Show(SLConfigManager.Current.GetSection
< Class > ( " Class " ).ClassID  +   "" ); 
         MessageBox.Show(SLConfigManager.Current.GetAppSettings(
" test1 " ).ToString()); 
         MessageBox.Show(SLConfigManager.Current.GetAppSettings
< Sex > ( " test2 " ).ToString()); 
     } 

        
public   enum  Sex 
     { 
      man,woman 
     }
复制代码

在这里我们模拟了AppSettings,和Section(注:这里的section,不需要预申明,在利用xml转化形成的,更利于我们的配置扩展性,使用到了XmlRoot,XmlElement等attribute),在看看我们的Class类:

复制代码
using  System.Xml.Serialization; 

namespace  SilverlightApplication2 

    [XmlRoot(
" Student " )] 
    
public   class  Student 
    { 
        [XmlElement(
" Name " )] 
        
public   string  Name 
        { 
get set ; } 

        [XmlAttribute(
" Age " )] 
        
public   int  Age 
        { 
            
get
            
set
        } 
    } 

    [XmlRoot(
" Class " )] 
    
public   class  Class 
    { 
        [XmlAttribute(
" ClassID " )] 
        
public   int  ClassID 
        { 
            
get
            
set
        } 

        [XmlArray()] 
        [XmlArrayItem(
" Students " )] 
        
public  System.Collections.Generic.List < Student >  Students 
        { 
            
get
            
set
        } 
    } 
}
复制代码

最后需要说明的是:在于我们的项目中可能存在xml文件还没有加载,的情况,所以加入了时间支持和IsLoaded属性标示。

源码:

View Code

最后附:测试程序打包下载


本文转自破狼博客园博客,原文链接:http://www.cnblogs.com/whitewolf/archive/2011/07/06/SlConfig.html,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值