我打电话RIA服务方法ImportSubcomponentFileSetFiles(这是一个调用,而不是查询)两次如下:这些异步RIA服务调用为什么在Web服务器上以串行方式执行?
foreach (var viewModel in FileSetViewModels.Where(vm => vm.IsSelectedForImport))
{
DomainContext.ImportSubcomponentFileSetFiles(viewModel.SubcomponentFileSet.Id, callback =>
{
//...
DomainContext.Load(DomainContext.GetSubcomponentFileSetWithStatusQuery(subcomponentFileSetId), LoadBehavior.RefreshCurrent,
callback2 =>
{
//...
}, true);
}, null);
}
我可以小提琴手看到两个请求出去ImportSubcomponentFileSetFiles立竿见影。
ImportSubcomponentFileSetFiles需要约15秒钟才能完成。第一个电话在大约15秒后回来,第二个电话在15秒后回来。从日志记录中可以看到,第二次调用ImportSubcomponentFileSetFiles在第一次调用完成之前不会启动。
我的问题是,为什么这些异步请求在服务器上被串行处理,我该如何处理它们并行呢?
附加信息
- 的WCF RIA服务托管在ASP.NET Web应用程序。
- 我没有在会话中存储任何内容。
- 我在服务方法中使用实体框架4。
- 域服务类扩展LinqToEntitiesDomainService <MyObjectContext>
我的服务方法如下:
public void ImportSubcomponentFileSetFiles(int subcomponentId)
{
Debug.WriteLine("{0}: {1} - ImportSubcomponentFileSetFiles method started", subcomponentId, DateTime.Now);
//...code for fetching subcomponentFileSet
subcomponentFileSet.ImportFiles(ObjectContext);
Debug.WriteLine("{0}: {1} - ImportSubcomponentFileSetFiles method finished", subcomponentId, DateTime.Now);
}
这里是我的日志,详细介绍了第二个方法调用没有启动,直到第一个已完成:
File Set A: 27/1/2011 11:20:06 PM 11:20:06 PM - Calling ImportSubcomponentFileSetFiles (Silverlight Client)
File Set A: 27/1/2011 11:20:06 PM 11:20:06 PM - ImportSubcomponentFileSetFiles Called (Silverlight Client)
File Set B: 27/1/2011 11:20:06 PM 11:20:06 PM - Calling ImportSubcomponentFileSetFiles (Silverlight Client)
File Set B: 27/1/2011 11:20:06 PM 11:20:06 PM - ImportSubcomponentFileSetFiles Called (Silverlight Client)
File Set A: 01/27/2011 23:20:06 - ImportSubcomponentFileSetFiles method started (Server)
File Set A: 01/27/2011 23:20:06 - ImportFiles Started (Server)
File Set A: 01/27/2011 23:20:23 - ImportFiles Finished (Server)
File Set A: 01/27/2011 23:20:23 - ImportSubcomponentFileSetFiles method finished (Server)
File Set A: 27/1/2011 11:20:23 PM - Import callback recieved (Silverlight Client)
File Set A: 01/27/2011 23:20:23 - GetSubcomponentFileSetWithStatus Started (Server)
File Set A: 01/27/2011 23:20:23 - GetSubcomponentFileSetWithStatus Finished (Server)
File Set B: 01/27/2011 23:20:23 - ImportSubcomponentFileSetFiles method started (Server)
File Set B: 01/27/2011 23:20:23 - ImportFiles Started (Server)
File Set A: 27/1/2011 11:20:23 PM - Refresh callback recieved (Silverlight Client)
File Set B: 01/27/2011 23:20:36 - ImportFiles Finished (Server)
File Set B: 01/27/2011 23:20:36 - ImportSubcomponentFileSetFiles method finished (Server)
File Set B: 27/1/2011 11:20:36 PM - Import callback recieved (Silverlight Client)
File Set B: 01/27/2011 23:20:36 - GetSubcomponentFileSetWithStatus Started (Server)
File Set B: 01/27/2011 23:20:36 - GetSubcomponentFileSetWithStatus Finished (Server)
File Set B: 27/1/2011 11:20:36 PM - Refresh callback recieved (Silverlight Client)
干杯,
克里斯
感谢您的反馈意见。我在上面提供了更多细节。 – Kip 2011-01-27 14:52:14