0

私 (WCF の初心者) は、X 線スペクトルを取得して分析する WCF サービスを作成しています。つまり、長時間実行されるプロセスであり、場合によっては数分かかります。当然、これは非同期呼び出しを要求するため、wsDualHttpBinding を使用し、ServiceContract で次のように定義します。

   [ServiceContract(Namespace="--removed--",
    SessionMode=SessionMode.Required, CallbackContract=typeof(IAnalysisSubscriber))]
public interface IAnalysisController 
{
    // Simplified - removed other declarations for clarity
    [OperationContract]
    Task<Measurement> StartMeasurement(MeasurementRequest request);
}

そして(簡略化された)実装には

    async public Task<Measurement> StartMeasurement(MeasurementRequest request)
    {
        m_meas = m_config.GetMeasurement(request);
        Spectrum sp = await m_mca.Acquire(m_meas.AcquisitionTime, null);
        UpdateSpectrum(m_meas, sp);
        return m_meas;
    }


private void McaProgress(Spectrum sp)
{
   m_client.ReportProgress(sp);
}

m_client は m_client = OperationContext.Current.GetCallbackChannel(); から取得したコールバック オブジェクトです。"Connect" メソッド - WCF クライアントが最初に接続したときに呼び出されます。これは、進捗レポートを使用しない限り機能しますが、m_mca.Acquire() メソッドの「null」を「new Progress(McaProgress)」に変更して進捗レポートを追加するとすぐに、最初の進捗レポートで、クライアントは、「サーバーは意味のある応答を提供しませんでした。これは、コントラクトの不一致が原因である可能性があります...」というエラーを生成します。

クライアントがコールバックを行うのではなく、タスクの特定の応答を待っている可能性があることは理解していますが、このタイプの進行状況レポートを WCF で実装するにはどうすればよいですか? クライアントが、生成されたライブ スペクトルを見て、スペクトル取得を完了するまでの残り時間を推定できるようにしたいと考えています。誰かがこの種の進行状況レポートを WCF で実装した場所へのヘルプまたはポインタは大歓迎です (私は検索してきましたが、ほとんどが EAP または APM および WCF への参照を見つけ、TAP にはあまり関連していません)。

ありがとう、デイブ

4

1 に答える 1