在我们的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,如需转载请自行联系原作者

Silverlight获取WebHost配置信息--WebClient和XmlSerializer模拟相关推荐

  1. C++通过WMI获取硬件配置信息

    C++通过WMI获取硬件配置信息 WMI即Windows管理规范.通过它可以访问.配置.管理和监视几乎所有的Windows资源. WMI提供程序在WMI和托管资源之间扮演着中间方的角色.提供程序代表使 ...

  2. Java.Utils:获取电脑配置信息

    Don't say much, just go to the code. package org.bood.common.utils;import java.io.*;/*** 获取电脑配置信息** ...

  3. java调用本地shell_java通过ProcessBuilder执行本地shell命令 获取ip配置信息

    [java]代码库import java.io.File; import java.io.IOException; import java.io.InputStream; import java.ut ...

  4. iOS获取WIFI配置信息,WIFI名称、网关(路由器地址)、本机IP地址、DNS

    DEMO地址(看代码,什么就都有了):https://github.com/SimpleBraver/test_wifi.git 1.获取当前手机WIFI名称信息 #import <System ...

  5. windows从注册表获取ip配置信息

    DNS的获取方式有多种: 这里提供一种方式是从注册表获取的: 在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameter ...

  6. winform c# 获取电脑配置信息和cpu 内存使用率

    效果如下 代码如下 using System; using System.Collections.Generic; using System.ComponentModel; using System. ...

  7. NHibernate获取实体配置信息(表名,列名等等)

    // 注意这里有个&符号,并不是写错了,而是约定 就是这样写的ctx.GetObject("&SessionFactory") 这是官网地址http://nhfor ...

  8. .NetCore获取Json和Xml格式的配置信息

    本篇将和大家分享的是:如何获取Json和Xml格式的配置信息,主要介绍的是Configuration扩展方法的使用,因为netcore的web应用在Startup中已经默认嵌入appsettings. ...

  9. Android平台Chromium net中的代理配置信息获取

    在计算机网络中,代理服务器 扮演着发起请求的客户端与服务器之间的中间人的角色.客户端连接到代理服务器,请求一些服务,比如文件,网页,或其它可以从服务器获得的资源,代理服务器以简化和控制复杂度的形式获取 ...

最新文章

  1. ExecutorService 的理解与使用
  2. Golang 301永久重定向
  3. 纯CSS三级弹出菜单
  4. 如何在新版的gitbook上写自己的书
  5. spingboot整合netty实现单聊整合实现
  6. Flink-环境搭建
  7. JSK-16016 单词排序【排序】
  8. poj 1027 深搜
  9. C语言打印杨辉三角(C笔记)
  10. 《C专家编程》之 内存泄漏
  11. 如何用xilinx sdk输出hello world
  12. 跨境电商如何通过WhatsApp Business进行客户服务?
  13. 如何免费将XPS转换为PDF格式
  14. 笔记本电脑Haswell黑苹果opencore睡眠实战
  15. mysql中dint_MySQL基础篇(1)SQL基础
  16. FrameGraph Extensible Rendering Architecture in Frostbite
  17. 如何把图片压缩到1M?怎么把照片缩小到1M?
  18. 使用 PetaLinux 自定义 ZynqMP 平台
  19. 苏州公交线路查询api-苏州公交状态实时跟踪
  20. THREEJS在场景图上动态标识一些文字方法二(文字精灵sprite)

热门文章

  1. 商务智能 “软肋”何在?
  2. 在ROMMON状态下恢复IOS的方法
  3. 基于HttpClient的HttpUtils(后台访问URL)
  4. 详解linux系统的启动过程及系统初始化
  5. Lossless Codec---APE代码解读系列(二)
  6. 【Nvivo教程】使用Nvivo构建计算的本体
  7. 全球首条瓷绝缘子自动化生产线:黏土巧造“瓷器活”
  8. 其原因可能是堆被损坏,这也说明 xxx.exe 中或它所加载的任何 DLL 中有 bug
  9. 斐波那契数列及青蛙跳台阶问题
  10. leetcode231