Silverlight 4 wcf调用在服务器上静默失败,但在调试时没有

时间:2012-02-10 10:28:12

标签: wcf silverlight

我有一个Silverlight 4应用程序,它与一个'经理'类进行对话,该类与WCF服务(.net 4)进行通信,该服务使用Microsoft.ApplicationBlocks.Data库与我的SQL数据库进行通信。

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

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

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

如果我从服务器上运行的wcf服务(非本地)生成服务引用,并使用我的Silverlight应用程序的本地实例,它也能正常工作,这让我觉得错误发生在服务引用中(生成的代码)和Silverlight通信。

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

我已经浏览过互联网,但没有发现任何与此情况有关的内容。我没有杀死对象,因此防止异常被返回到不存在的对象。

简而言之,Manager在本地系统上正确接收并抛出事件,但在服务器上部署时却没有。

WCF专家需要!

1 个答案:

答案 0 :(得分: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
            }
            );

显示真实错误。我仍然不知道为什么这对于生产服务器上的应用程序是必需的,但它在我的localhost上工作正常,无论是否在调试模式下。

如果有更多关于这种情况的技术知识的人读到这一点,请非常友好地解释这里发生的事情。