2012-03-20 5 views
0

コールを処理し、処理されたデータを別のサービスに送信し、コールバックおよびコールバックを起動してそのアプリケーションの他のインスタンスに警告するWCFサービスがあります。もともとコールバックは最後に呼び出されていましたが、2番目のサービスが実行されていなければ、発見しようとしている間に20秒の遅延があることがわかりました。その時だけコールバックが呼び出されました。私は2番目のサービスへの呼び出しの前にコールバック通知を移動しましたが、まだ遅延がありました。私はバックグラウンド・プロセスでコールバックを実行しようとしましたが、それもうまくいきませんでした。発見のタイムアウトを変更する以外に、この遅延を回避する方法はありますか?ここにコードスニペットがあります。コールバックのWCFディスカバリ処理が遅くなる

// Alert the admins of the change. 
if (alertPuis) 
{ 
    ReportBoxUpdated(data.SerialNumber); 
} 

// Now send the change to the box if he's online. 
var scope = new Uri(string.Format(@"net.tcp://{0}", data.SerialNumber)); 
var boxAddress = DiscoveryHelper.DiscoverAddress<IAtcBoxService>(scope); 
if (boxAddress != null) 
{ 
    var proxy = GetBoxServiceProxy(boxAddress); 

    if (proxy != null) 
    { 
     proxy.UpdateBox(boxData); 
    } 
    else 
    { 
     Log.Write("AtcSystemService failed on call to update toool Box: {0}",  
        data.SerialNumber); 
    } 
} 
else if (mDal.IsBoxDataInPendingUpdates(data.SerialNumber) == false) 
      mDal.AddPendingUpdate(data.SerialNumber, null, true, null); 
} 

private static void ReportBoxUpdated(string serialNumber) 
{ 
    var badCallbacks = new List<string>(); 

    Action<IAtcSystemServiceCallback> invoke = callback => 
     callback.OnBoxUpdated(serialNumber); 
    foreach (var theCallback in AdminCallbacks) 
    { 
     var callback = theCallback.Value as IAtcSystemServiceCallback; 
     try 
     { 
      invoke(callback); 
     } 
     catch (Exception ex) 
     { 
      Log.Write("Failed to execute callback for admin instance {0}: {1}", 
        theCallback.Key, ex.Message); 
      badCallbacks.Add(theCallback.Key); 
     } 
    } 

    foreach (var bad in badCallbacks) // Clean out any stale callbacks from the list. 
    { 
     AdminCallbacks.Remove(bad); 
    } 
} 

答えて

1

あなたは結果をキャッシュして考えがありますか?

関連する問題