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);
}
}