public void SetPublishingMode(
OperationContext context,
bool publishingEnabled,
UInt32Collection subscriptionIds,
out StatusCodeCollection results,
out DiagnosticInfoCollection diagnosticInfos)
{
bool diagnosticsExist = false;
results = new StatusCodeCollection(subscriptionIds.Count);
diagnosticInfos = new DiagnosticInfoCollection(subscriptionIds.Count);
for (int ii = 0; ii < subscriptionIds.Count; ii++)
{
try
{
// find subscription.
Subscription subscription = null;
lock (m_lock)
{
if (!m_subscriptions.TryGetValue(subscriptionIds[ii], out subscription))
{
throw new ServiceResultException(StatusCodes.BadSubscriptionIdInvalid);
}
}
// update the subscription.
subscription.SetPublishingMode(context, publishingEnabled);
// save results.
results.Add(StatusCodes.Good);
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
diagnosticInfos.Add(null);
}
}
catch (Exception e)
{
ServiceResult result = ServiceResult.Create(e, StatusCodes.BadUnexpectedError, String.Empty);
results.Add(result.Code);
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, result);
diagnosticInfos.Add(diagnosticInfo);
diagnosticsExist = true;
}
}
if (!diagnosticsExist)
{
diagnosticInfos.Clear();
}
}
}