因远程访问导致Silverlight中Design界面不显示的解决方法

本文详细介绍了在使用Silverlight创建应用程序时遇到远程数据加载错误的解决方案。通过检查和修改代码,作者成功地解决了在设计模式下远程加载数据导致的System.MissingMethodException错误。文章提供了具体的步骤和代码示例,帮助开发者理解和解决类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了更方便说明问题,本文将新建一个项目用于重现错误,然后解决错误。说明:vs2010 ultimate + silverlight5

本文中所有代码都可以在github中查看,git版本中采用了master-dev的方式。在master中可以查看每一个demo的最后完成,在dev中可以查看每一步的代码。

github地址:git@github.com:kiwiwin/silverlight-demo.git

一、产生错误

1.首先创建一个新的silverlight application project。取名为mode-check-demo。

2.在mode-check-demo.Web中新建一个webservice,取名为MyDataService。在其中添加一个WebMethod,取名为GetData

    public class MyDataService : System.Web.Services.WebService
    {

        [WebMethod]
        public string GetData()
        {
            return "This is My Data";
        }
    }


3.编译mode-check-demo.Web,在mode-check-demo中添加service reference,找到MyDataService, namespace取名为MyDataService

4.添加一个UserControl,取名为Data.xaml,并添加一个loaded事件,表示当Data.xaml被载入的时候,触发该事件

    public partial class Data : UserControl
    {

//...
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            var client =  new MyDataServiceSoapClient();
            client.GetDataCompleted += (s, args) => displayBox.Text = args.Result;
            client.GetDataAsync();
        }
    }

5.将Data.xml拖入MainPage中,如果你看到下面这个提示,我的目的就算达到了:

System.MissingMethodException


6.ctrl+F5,运行,在浏览器中是可以正常使用的。[微笑会不会有人鄙视我用IE呢?]

二、解决问题

从Design中可以看出问题的产生原因,是MainPage中load了Data这个UserControl,而UserControl的loaded对应的事件是远程的,所以出现了上图中显示的错误。

1.在UserControl_Loaded中检查是不是出于Design Mode中,如果出于Design Mode,则不加载数据:

        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
            {
                var client = new MyDataServiceSoapClient();
                client.GetDataCompleted += (s, args) => displayBox.Text = args.Result;
                client.GetDataAsync();
            }
        }


2.编译,reload MainPage.xaml,搞定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值