0

Silverlight 5 アプリケーションで WCF サービスを使用しています。

サービス コールの 1 つで、時間のかかる作業を行っています。イベントが完了するまでに 1 ~ 2 分かかります。ビジー インジケーターで UI をブロックしていないため、ユーザーは引き続きアプリケーションを操作できます。

問題は、最初のサービス呼び出しを行うときに、時間のかかる操作を実行することです。ユーザーが他のサービスをロードすると、最初のサービスが完了するまで 2 番目のサービス呼び出しが処理されません。

このサービスの完了を待機する他の呼び出しを避けるために、時間のかかるサービス呼び出しを別のスレッドで実行するにはどうすればよいですか?

Web サービス コード

[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

次の 2 つのオプションがあります。

  1. サーバー側で呼び出しを非同期にします。TPLを使用して、次のように書くことができますTask.Factory.StartNew(...)
  2. ServiceBehavior属性を使用してサービスの実装を装飾し、次のように設定できConcurrencyModeますMultiple

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

次に、wcf はサービスへの呼び出しを並行してスケジュールします。ただし、サービス コードがスレッドセーフであることを確認する必要があります。

于 2012-09-07T11:23:57.057 に答える