【问题标题】:Silverlight 4 wcf call fails silently on server but not when debuggingSilverlight 4 wcf 调用在服务器上静默失败,但在调试时没有
【发布时间】:2012-02-10 10:28:11
【问题描述】:

我有一个 Silverlight 4 应用程序,它与一个“管理器”类对话,它与一个 WCF 服务 (.net 4) 对话,它使用 Microsoft.ApplicationBlocks.Data 库与我的 SQL 数据库对话。

我的问题是异常不会冒泡到 Silverlight 应用程序。

发生的情况是,对数据库的插入失败,创建一个 SQLException,然后将错误进一步抛出到 Manager 使用的生成的服务引用代码,在完成的事件处理程序中,发现 Error 属性是不为空。这会向 Silverlight 应用程序抛出一个事件,该应用程序会向用户显示一条消息,说明发生了错误。

这在我在本地调试我的应用程序时有效,但当应用程序在实时/生产服务器上时静默失败,不会显示错误消息。

如果我从服务器(不是本地)上运行的 wcf 服务生成服务引用,并使用我的 Silverlight 应用程序的本地实例,它也可以正常工作,这让我认为服务引用中发生了错误(生成的代码)和 Silverlight 通信。

该服务托管在“手动编码”主机应用程序中,服务器上的 Silverlight 应用程序托管在 IIS 中。他们都使用http而不是https。

我搜索了互联网,但没有发现与这种情况有关的任何信息。我不会杀死对象,因此可以防止将异常返回给不存在的对象。

简而言之,管理器在我的本地系统上正确接收并引发了一个事件,但在部署到服务器上时却没有。

请需要 WCF 专家!

【问题讨论】:

    标签: wcf silverlight


    【解决方案1】:

    因此,经过一番徒劳的搜索,我的同事构建了一个测试应用程序,在其中他基于此示例构建了一个自定义的 silverlight Fault Contract 类: http://msmvps.com/blogs/theproblemsolver/archive/2009/01/27/returning-exception-information-to-a-silverlight-client-through-wcf.aspx

    虽然这有助于从服务中获取特定错误而不是 Silverlight 喷出的一般垃圾,但我们仍然无法将错误显示在屏幕上。

    我之前关于通讯失败的猜测是错误的。相反,这只是结果对 UI 线程没有任何影响的事实。我们使用 Dispatcher 跳回 UI 线程:

    Deployment.Current.Dispatcher.BeginInvoke(
                () =>
                {
                    //throw event to window which shows error window
                }
                );
    

    它显示了真正的错误。我仍然不知道为什么生产服务器上的应用程序需要这样做,但它在我的本地主机上运行良好,无论是否处于调试模式。

    如果有人对这一事件的技术细节有更多了解,请阅读本文,请解释一下这里到底发生了什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 2015-04-22
      相关资源
      最近更新 更多