时间消耗WCF服务调用阻止其他WCF服务调用。

时间:2012-09-07 11:14:40

标签: wcf silverlight web-services wcf-data-services

我在Silverlight 5应用程序中使用WCF服务。

在我的一个服务电话中,我正在做一项耗时的工作。完成活动需要1或2分钟。我没有使用忙指示符阻止UI,因此用户仍然可以与应用程序进行交互。

问题是当我进行第一次服务呼叫时,它会执行一些耗时的操作。当用户加载其他用户时,在第一次服务完成之前,我的第二次服务呼叫才会被处理。

如何在单独的线程中执行耗时的服务调用以避免其他问题 等待此服务完成的电话?

WebService代码

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TestService
{[OperationContract]
    public bool PerformFileScan(int fileID)
    {
    //Time Consuming Process
    }
}

CS

client.PerformFileScanAsnc(docId);
client.PerformFileScanCompleted += new EventHandler<.PerformFileScanCompletedEventArgs>(client_PerformFileScanCompleted);

1 个答案:

答案 0 :(得分:0)

您有两种选择:

  1. 在服务器端使您的呼叫异步。您可以使用TPL,只需编写Task.Factory.StartNew(...)
  2. 之类的内容
  3. 您可以使用ServiceBehavior属性修饰服务实现,并将ConcurrencyMode设置为Multiple

    [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]    
    public class YourService
    {
    
    }
    
  4. 然后wcf将并行安排对您服务的调用。但是你必须确保你的服务代码是线程安全的!