0

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

在我的一个服务电话中,我正在做一项耗时的工作。完成该事件需要 1 或 2 分钟。我没有用繁忙的指示器阻塞 UI,因此用户仍然可以与应用程序交互。

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

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

网络服务代码

[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);
4

1 回答 1

0

你有两个选择:

  1. 在服务器端使您的调用异步。您可以使用 TPL 并编写类似的内容Task.Factory.StartNew(...)
  2. ServiceBehavior您可以使用属性装饰您的服务实现并将其设置ConcurrencyModeMultiple

    [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]    
    public class YourService
    {
    
    }
    

然后 wcf 将并行安排对您的服务的调用。但是你必须确保你的服务代码是线程安全的!

于 2012-09-07T11:23:57.057 回答