从RIA服务加载数据时Silverlight中的偶发Arg_COMException

时间:2011-03-01 13:44:57

标签: silverlight exception service ria

用户在处理应用程序时有时会遇到奇怪的异常。我无法复制它。它在执行一个特定的域服务查询时发生。此查询经常执行(每次用户保存更改时)。

查询没有参数。有简单的过滤:Context.GetEventsQuery()。其中​​(lce => lce.Id> maxId)

域服务方法很简单:       public IQueryable GetEvents()       {          return ObjectContext.Events;       }

第一次发生后,它每次都会发生(直到用户刷新网页)。

以下是日志中的异常文本: 查询'GetEvents'的加载操作失败。 System.ServiceModel.DomainServices.Client.DomainOperationException:查询'GetEvents'的加载操作失败。 ---> System.Exception ---> System.Exception:[Arg_COMException] 参数: 调试资源字符串不可用。通常,密钥和参数提供了足够的信息来诊断问题。见http://go.microsoft.com/fwlink/?linkid=106663&Version=4.0.50917.0&File=mscorlib.dll&Key=Arg_COMException  在System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)  在System.Net.Browser.BrowserHttpWebRequest。<> c__DisplayClass5.b__4(Object sendState)  在System.Net.Browser.AsyncHelper。<> c__DisplayClass2.b__0(Object sendState)  ---内部异常堆栈跟踪结束---  在System.ServiceModel.DomainServices.Client.WebDomainClient`1.EndQueryCore(IAsyncResult asyncResult)  在System.ServiceModel.DomainServices.Client.DomainClient.EndQuery(IAsyncResult asyncResult)  在System.ServiceModel.DomainServices.Client.DomainContext.CompleteLoad(IAsyncResult asyncResult)  ---内部异常堆栈跟踪结束---  在System.ServiceModel.DomainServices.Client.OperationBase.Complete(异常错误)  在System.ServiceModel.DomainServices.Client.LoadOperation.Complete(异常错误)  在System.ServiceModel.DomainServices.Client.DomainContext.CompleteLoad(IAsyncResult asyncResult)  在System.ServiceModel.DomainServices.Client.DomainContext。<> c__DisplayClass1b.b__17(Object)

可能是什么原因?

1 个答案:

答案 0 :(得分:4)

我们有同样的零星问题。跟踪它到竞争条件,我们在域数据源上同时调用“加载”不止一次。

在我们的例子中,我们为domaindatasource编写了一个名为“DurableDomainDataSourceBehavior”的附加行为。它的工作是捕获失败的负载,检查是否存在通信异常,如果有,请等待几秒再尝试再次加载。我们发现我们有一些有缺陷的逻辑,它将行为的多个实例附加到同一个domaindatasource实例。当最终用户在加载DurableDomainDataSourceBehavior的每个实例时遇到与网络相关的问题时,将调用load导致arg_ComException。修复是为了确保我们没有将行为的多个实例附加到同一个domaindatasource实例,并在代码中查找我们可能同时多次调用DomainDataSource.Load的其他位置。

我不确定这是否特定于DomainDataSource,或者是否可以使用DomainContext自行复制。我从来没有能够在本地重现这个问题,但我可以确认,因为我们的修复它不再出现在日志中。