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

Pav*_*syn 6 silverlight service ria exception

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

查询没有参数.有简单的过滤: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]参​​数:调试资源字符串不可用.通常,密钥和参数提供了足够的信息来诊断问题. 在System.Net.Browser.BrowserHttpWebRequest上的System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)中查看http://go.microsoft.com/fwlink/?linkid=106663&Version=4.0.50917.0&File=mscorlib.dll&Key=Arg_COMException System.Net.Browser.AsyncHelper.<> c__DisplayClass5.b__4(Object sendState).<> c__DisplayClass2.b__0(Object sendState)---内部异常堆栈跟踪结束---在System.ServiceModel.DomainServices.Client.WebDomainClient在System.ServiceModel.DomainServices.Client.DomainContext.CompleteLoad(IAsyncResult asyncResult)的System.ServiceModel.DomainServices.Client.DomainClient.EndQuery(IAsyncResult asyncResult)的`1.EndQueryCore(IAsyncResult asyncResult)---内部异常堆栈跟踪结束 - - System.ServiceModel.DomainServices.Client.OmplerationBase.Complete(异常错误),位于System.ServiceModel.DomainServices.Client.DomainContext.CompleteLoad(IAsyncResult as)的System.ServiceModel.DomainServices.Client.LoadOperation.Complete(异常错误)yncResult)在System.ServiceModel.DomainServices.Client.DomainContext.<> c__DisplayClass1b.b__17(Object)

可能是什么原因?

Jer*_*yow 4

我们遇到了同样的零星问题。追踪到竞争条件,我们在域数据源上同时多次调用“加载”。

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

我不确定这是否特定于 DomainDataSource 或者是否可以使用 DomainContext 自己复制。我无法在本地重现该问题,但我可以确认,自从我们修复后,它不再出现在日志中。