2012-02-10 65 views
1

我有一个与'manager'类交谈的Silverlight 4应用程序,它与使用Microsoft.ApplicationBlocks.Data的WCF服务(.net 4)库与我的SQL数据库交谈。Silverlight 4 wcf调用在服务器上无提示失败,但在调试时失败

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

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

这适用于当我在本地调试应用程序但在应用程序位于实时/生产服务器时以静默方式失败时,不显示任何错误消息。

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

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

我已经搜遍了互联网,但没有发现任何与这种情况有关的东西。我不杀死对象,因此防止异常返回到不存在的对象。

简而言之,管理器在我的本地系统上正确接收和抛出一个事件,但在服务器上部署时不会发生。

WCF专家需要请!

回答

1

于是,经过一番更无觅处,我collegue建立一个测试应用程序,在那里他建立了一个自定义的Silverlight故障合同类基于这个例子: http://msmvps.com/blogs/theproblemsolver/archive/2009/01/27/returning-exception-information-to-a-silverlight-client-through-wcf.aspx

虽然这有助于从服务获取特定的错误很多而不是通用的垃圾Silverlight喷嘴,我们仍然不能在屏幕上显示错误。

我之前猜测通信失败是不正确的。相反,这只是事实,结果对UI线程没有任何影响。我们使用Dispatcher跳回UI Thread:

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

其中显示了真正的错误。我仍然不清楚生产服务器上应用程序需要这样做的原因,但它在我的本地主机上工作正常,无论是否处于调试模式。

如果任何人对这一事件的技术性知识有更多的了解,请尽量解释这里发生的事情。

相关问题