【发布时间】:2011-01-27 23:45:15
【问题描述】:
我正在调用 RIA 服务方法 ImportSubcomponentFileSetFiles(这是一个 Invoke,而不是 Query)两次,如下所示:
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);
}
我可以在 Fiddler 中看到两个请求立即发送到 ImportSubcomponentFileSetFiles。
ImportSubcomponentFileSetFiles 大约需要 15 秒才能完成。第一个电话在大约 15 秒后返回,第二个电话在 15 秒后返回。我可以从日志中看到,对 ImportSubcomponentFileSetFiles 的第二次调用在第一次调用完成之前不会开始。
我的问题是,为什么这些异步请求会在服务器上串行处理,我该如何并行处理它们?
其他信息
- WCF Ria 服务托管在 ASP.NET Web 应用程序中。
- 我没有在会话中存储任何内容。
- 我在服务方法中使用了 Entity Framework 4。
- 域服务类扩展了 LinqToEntitiesDomainService
我的服务方式如下:
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)
干杯,
克里斯
【问题讨论】:
标签: c# silverlight asynchronous entity-framework-4 wcf-ria-services