2012-09-07 235 views
0

我正在使用我的Silverlight 5應用程序的WCF服務。耗時WCF服務調用阻止其他WCF服務調用。

在我的一個服務電話中,我正在做一個耗時的工作。完成活動需要1到2分鐘的時間。我不會阻塞繁忙指標的用戶界面,因此用戶仍然可以與應用程序進行交互。

問題是當我做我的第一次服務調用時,它執行一些耗時的操作。當用戶加載其他服務時,我的第二個服務調用在第一個服務完成之前不會被處理。

如何在單獨的線程中執行耗時的服務調用以避免其他 調用等待此服務完成?

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

你有兩個選擇:

  1. 請在服務器端您的通話異步的。您可以使用TPL,只是喜歡寫東西Task.Factory.StartNew(...)
  2. 您可以用ServiceBehavior屬性裝飾你的服務實現,並設置ConcurrencyModeMultiple

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

然後WCF將安排爲您服務電話在平行下。但是,你必須確保你的服務代碼是線程安全的!