我在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);
答案 0 :(得分:0)
您有两种选择:
Task.Factory.StartNew(...)
您可以使用ServiceBehavior
属性修饰服务实现,并将ConcurrencyMode
设置为Multiple
:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
public class YourService
{
}
然后wcf将并行安排对您服务的调用。但是你必须确保你的服务代码是线程安全的!