Silverlight的部署

由于我以前写的有关地图服务以及WCF、WebService的访问都是手工配置的,这样部署的时候麻烦,以后维护的时候也很复杂。

1 .Silverlight读取Web.config

以前所做的有关配置都是读取web.config 文件的,可是silverlight不能直接读取Web.config文件,对于这个问题我找过相关的例子,根据例子参考尝试了几次还是不对。还有一种思路就是在wcf中读取Web.Config文件,然后silverlight调用wcf服务,可是关键问题是wcf服务也得动态访问啊,如果这样是可以,可是感觉还是琐碎,给人一种乱七八糟的感觉,有时候我感觉都很乱。之后看了相关的资料,在首页Default.aspx页面中用Literal控件,代码是   <asp:Literal ID="InitParams" runat="server"></asp:Literal>。(Literal 最常用于向页面中动态添加内容。)Default.aspx.cs中写这样一个方法  private void InitDefaultSettings(Literal defaultLit)
        {
            NameValueCollection appSettings = ConfigurationManager.AppSettings;

            StringBuilder SB = new StringBuilder();
            SB.Append("<param name=/"InitParams/" value=/"");

            int SettingCount = appSettings.Count;
            for (int Idex = 0; Idex < SettingCount; Idex++)
            {
                SB.Append(appSettings.GetKey(Idex));
                SB.Append("=");
                SB.Append(appSettings[Idex]);
                SB.Append(",");
            }
            SB.Remove(SB.Length - 1, 1);
            SB.Append("/" />");

            InitParams.Text = SB.ToString();
        }读取相关参数的值。然后在 App.xaml.cs中定义属性 public IDictionary<string, string> DefaultSetting;


        private void Application_Startup(object sender, StartupEventArgs e)
        {
            DefaultSetting = e.InitParams;//添加的代码
            this.RootVisual = new MainPage();
        }
  之后新建一个ConfigManager类,去读取相应的配置。读取的方式 

private ConfigManager()
        {
            App currentApp = (App)Application.Current;
            /**-------------wyp-------------**/
            if (currentApp.DefaultSetting.ContainsKey("BaseLayer"))//GIS地图服务的url
            {
            string    BaseLayer = currentApp.DefaultSetting["BaseLayer"];
            }

}之后便可以获取其值。

 2.Silverlight动态访问Wcf服务

    以前对有关WCF的调用都是在vs中直接引用的,就会自动生成配置文件ServiceReferences.ClientConfig。可是这样部署的时候就很麻烦的。之后就想到动态调用WCF。刚开始我所理解的动态调用就不用去引用了,直接配置就行了,所以看到好多例子就是有些犯糊涂,不是动态的调用吗?怎么都是这样的啊。之后别人也给过类似的代码,我才发现自己的理解有差错,动态调用的话是不用ServiceReferences.ClientConfig这个文件,可以直接删掉,但是还是必须引用服务。具体的思路就是在Silverlight中新建一个类,写一个方法去读取配置文件中的相关配置,测试了改我机器的ip值,访问也没有问题。

  核心的代码/// <summary>
        /// 动态创建WCF客户端
        /// </summary>
        /// <returns></returns>
        public static GIS.WCFServiceRef.WCFServiceClient GetWCFDynamicClient()
        {
            try
            {
                HttpTransportBindingElement httpTransport = new HttpTransportBindingElement();
                httpTransport.MaxReceivedMessageSize = 2147483647;
                httpTransport.MaxBufferSize = 2147483647;
           
                BinaryMessageEncodingBindingElement binaryEle = new BinaryMessageEncodingBindingElement();

                CustomBinding binding = new CustomBinding(binaryEle, httpTransport);
                binding.Name = "CustomBinding_WCFService";   

                //--测试用WCF地址
                Uri testuri = new Uri(ConfigManager.Instance.WcfUrl);//wcf的地址
               
                GIS.WCFServiceRef.WCFServiceClient client=new GIS.WCFServiceRef.WCFServiceClient(binding, new EndpointAddress(testuri));

                return client;
            }
            catch
            {
                MessageBox.Show("生成WCF服务时出错,请联系管理员修复此问题!","消息提示",MessageBoxButton.OK);
                return null;
            }
        }

呵呵 这两个问题终于搞定了,这两个问题很典型,估计好多做部署的时候都会遇到这样的问题。开始做我其他的工作啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的熊猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值