none
sl调用webservice(不是WCF)出错了,需要配置什么吗? RRS feed

  • 问题

  • 错误信息:
    throw new Error("Unhandled Error in Silverlight Application 操作过程中出现异常,结果无效。有关异常的详细信息,请查看 InnerException。   位于 System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()\n   位于 Gico.SLOA.SLApp.ServiceReference1.UserAddCompletedEventArgs.get_Result()\n   位于 Gico.SLOA.SLApp.Login.LoginPage.ws_UserAddCompleted(Object sender, UserAddCompletedEventArgs e)\n   位于 Gico.SLOA.SLApp.ServiceReference1.WebServiceSoapClient.OnUserAddCompleted(Object state)");
    ————————————————————————————————————————————————————
    我只是做了一个demo。
    web项目里一个数据库insert的语句,放在webservice里了(不是WCF)。
    在sl里引用这个webservice。

    部分代码:

      User model = new User();
         model.Name = this.TextBoxName.Text.Trim();
         model.Pwd = this.TextBoxPwd.Text.Trim();
    
    
         ServiceReference1.WebServiceSoapClient ws = new Gico.SLOA.SLApp.ServiceReference1.WebServiceSoapClient();
         ws.UserAddAsync(model);
         ws.UserAddCompleted += new EventHandler<UserAddCompletedEventArgs>(ws_UserAddCompleted);
                    
         }
    }
    
            void ws_UserAddCompleted(object sender, UserAddCompletedEventArgs e)
            {
                    Popup p = new Popup();
                    p.Msg = e.Result.ToString();
                    p.Show();            
            }

    我用的silverlight是3.0的版本。
    是在本机上作的测试,没放服务器。
    web项目已经配置到IIS下了,vs里打开的是iis下的web项目。

    第一个数据库的语句就发生错误,头大。
    ——————————————————————

    发几句牢骚:
    一,微软为什么不做个silverlight的开源的项目,例如petshop之类的,给我们做个示例呀。
         这个开源的项目很重要很重要呀,就像大家都看过petshop后明白了3层,接口怎么做怎么实现。
         尤其是数据库怎么调用。以前下载过一次,可是是假数据的。

    二,silverlight为什么就不能支持dataset呢?技术上应该不是问题吧。

    三,最恶心的是silverlight项目没法引用一般类库,哎,一个实体类,tmd还得做两个,一个一般类库,一个silverlight类库(虽然里边是添加链接,不是直接添加的)。

    四,silverlight一直想赶超flash,或flash杀手什么的,可是为什么就不能给我们程序员提供更多的方便呀,例如开源项目,多国语言的参考资料。

    五,再不得不说下,silverlight调用数据库,简直是难于上青天,虽然有个什么RIA SERVICE,可是全世界只能找到一篇中文的介绍的。我们遇见问题了咋办,难道是故意提高门槛的??

    六,手里的项目一直想用silverlight来做,因为基于种种问题,不得不放弃了。

    今天天气不好,闷热,心情也不好,第一次调用数据库就出这样的鸟问题,就发了几句牢骚。
    项目经理正在考虑富客户端的东西,还是用flash吧,起码网上资料一大堆。
    视别人的帮助为恩赐~
    2009年7月17日 3:14

答案

  •         void ws_UserAddCompleted(object sender, UserAddCompletedEventArgs e)
            {
                if(e.Error == null)
                {
                    Popup p = new Popup();
                    p.Msg = e.Result.ToString();
                    p.Show();            
                }
            }
    最好加个返回判断,这样你就可以断定是不是你的WebService出现问题了
    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”
    2009年7月18日 3:40
    版主

全部回复

  • 我在本机上运行,不涉及到跨域的问题呀。

    网上说用什么ClientAccessPolicy.xml,添加这个文件什么的。

    可是我没跨域呀。
    视别人的帮助为恩赐~
    2009年7月17日 3:22
  • 如果是WEB SERIVES那首先要保证在WEB模式下可以正常返回数据.

    不过WEBSERIVES这东西用在SL里不是特别好,单页多次访问就容易出问题.建议使用WCF

    SL其实可以看做一个CLIENT,既然是CLIENT如果想读服务端数据必然需要服务端接口.CLIENT 2 SERVER模式其实就是CLIENT请求服务端,服务端运算后返回序列化的数据


    刚开始我也用WEBSERIVES来做,为了的偷点懒~ 结果在同一页多次异步调用的时候WEBSERIVES经常性的返回内部错误.

    在我看来SL还有发展空间,慢慢来吧,共同努力

    2009年7月17日 3:59
  • 刚才我做测试了,终于发现了,这个silverlight项目在IIS下就会出问题,不在IIS下就没问题。

    IIS的配置怎么做呀。

    我已经加了MIMI类型了,

    也已经放根目录下两个XML文件了。

    还有其他工作吗??
    视别人的帮助为恩赐~
    2009年7月17日 10:01
  • 根目录的XML文件? 全局跨域策略文件?

    看看.NET设置是否为2.0?

    既然加了全局策略是否尝试过将WEB SERVICES与SL在IIS中分离建站?
    2009年7月17日 10:28
  • http://localhost/clientaccesspolicy.xml 可以访问到。这个文件已经放好了。


    是的,.net设置为 2.0.难道要改成 3.0???

    为什么没有 3.0或 3.5的选项呢,

    纳闷了。我机器上有vs 08 ,还有silverlight,我肯定装framework 3.5了吧。

    我试试呀。谢谢
    视别人的帮助为恩赐~
    2009年7月17日 10:35
  • 你的WebService插入方法是Void吧,然后你去e.Result了,给你这个错我,我觉得是

    ps:需要多多锻炼毅力,方可成就美好的未来
    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”
    2009年7月17日 14:25
    版主
  • 要确认Web Service和客户端通讯正常,本地运行也需要跨域文件设置。

    微软对于silverlight已经提供了一个很大的开源项目,就是Silverlight Toolkit,http://www.codelplex.com/silverlight
    另外,还有Microsoft官方项目Health Common http://www.silverlightchina.net/html/works/2009/0713/72.html , 我感觉现在的开源项目虽然少,但是对于学习是足够了。:)
    另外,现在SL只有英文版,所以多国语言资料不齐,我想微软已经在准备其他语言版本的发布了吧。
    对于SL调用数据库问题,已经是老话题了,如果说SL以后能火,一定是因为RIA,现在我们刚看到了1.0 preview的强大功能,相信正式版发布后,一定很强。

    2009年7月17日 16:05
  • 你的WebService插入方法是Void吧,然后你去e.Result了,给你这个错我,我觉得是

    ps:需要多多锻炼毅力,方可成就美好的未来
    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”

    不是呀,熊哥,我那个函数是有返回值的。

    PS:如果没有返回值,是e.Result就点不出来。
    视别人的帮助为恩赐~
    2009年7月18日 1:34
  •         void ws_UserAddCompleted(object sender, UserAddCompletedEventArgs e)
            {
                if(e.Error == null)
                {
                    Popup p = new Popup();
                    p.Msg = e.Result.ToString();
                    p.Show();            
                }
            }
    最好加个返回判断,这样你就可以断定是不是你的WebService出现问题了
    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”
    2009年7月18日 3:40
    版主
  • 看一下这个例子也许对你有一点帮助

    http://www.slblogger.cn/p12
    .htm
    2009年7月23日 5:58