当您单击“登录”按钮时,我们在Silverlight 4(带有RIA服务的OOB)中收到此错误InvalidOperationException“userservice operation has progress”,但它并不是每次都会发生,有时会多次发生。如果我忽略错误并继续运行它似乎工作。有谁知道造成这种情况的原因是什么?
编辑:该项目是使用“Silverlight业务应用程序”模板创建的。
堆栈跟踪
在System.ServiceModel.DomainServices.Client.ApplicationServices.AuthenticationService.StartOperation(AuthenticationOperation操作)
在System.ServiceModel.DomainServices.Client.ApplicationServices.AuthenticationService.Login(LoginParameters参数,Action`1 completeAction,Object userState)
在Reach.SL.LoginUI.LoginForm.LoginButton_Click(对象发送者,EventArgs e)
在System.Windows.Controls.Primitives.ButtonBase.OnClick() 在System.Windows.Controls.Button.OnClick() 在System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
在System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl,EventArgs e)
在MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj,IntPtr unmanagedObjArgs,Int32 argsTypeIndex,Int32 actualArgsTypeIndex,String eventName)
编辑(更多信息)。 我已经能够使用新的“Silverlight业务应用程序”解决方案和一些小的更改来一致地重现问题。问题发生在服务响应较慢的站点上,因此所有更改都是为了加快我的开发箱上的用户输入。 如果您从“Silverlight业务应用程序”开始并将其更改为执行两项操作; 1.加载后立即显示登录框。 2.默认使用某些有效凭据(因此您无需键入它们)。
然后运行应用程序并在显示屏幕时按“输入”(登录),然后我会一直收到错误。
我使用过Fiddler,它表明实际上有两个电话正在发生......
/ClientBin/SilverlightBusinessApp-Web-AuthenticationService.svc/binary/GetUser
/ClientBin/SilverlightBusinessApp-Web-AuthenticationService.svc/binary/Login
在调用登录时第一次调用GetUser时仍会出现错误。 GetUser的这个调用来自哪里? (它是从aspnetDB获取凭据)
我可以添加哪些代码,因此在GetUser调用完成之前它不会调用Login? (我尝试过“WebContext.Current.Authentication.IsBusy”但是在调用getUser时它似乎没有重置。
答案 0 :(得分:4)
在Silverlight业务应用程序模板中,可以在App.xaml.cs
方法的Application_Startup
中找到以下代码行。
WebContext.Current.Authentication.LoadUser(this.Application_UserLoaded, null);
这一行将导致GetUser
上的AuthenticationService
被调用(该模板也随附)。因此,在启动应用程序时,基本上会发生此GetUser
服务调用,这是导致用户在启动应用程序后快速登录的问题。
如果您不希望用户在选中“保持登录状态”字段时自动登录,则可以安全地从Application_Startup
中删除此行。另一种选择是创建某种LoginHelper
类,并在登录完成时触发该类中的事件。在您的登录控件上侦听此事件,并仅在初始GetUser
调用完成时启用登录按钮。
还有其他一些潜在的解决方法,但如果不了解项目的架构,则很难推荐。希望这会有所帮助。