本文整理汇总了C#中DiagnosticInfoCollection.Add方法的典型用法代码示例。如果您正苦于以下问题:C# DiagnosticInfoCollection.Add方法的具体用法?C# DiagnosticInfoCollection.Add怎么用?C# DiagnosticInfoCollection.Add使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DiagnosticInfoCollection
的用法示例。
在下文中一共展示了DiagnosticInfoCollection.Add方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ActivateSession
/// <summary>
/// Invokes the ActivateSession service.
/// </summary>
/// <param name="requestHeader">The request header.</param>
/// <param name="clientSignature">The client signature.</param>
/// <param name="clientSoftwareCertificates">The client software certificates.</param>
/// <param name="localeIds">The locale ids.</param>
/// <param name="userIdentityToken">The user identity token.</param>
/// <param name="userTokenSignature">The user token signature.</param>
/// <param name="serverNonce">The server nonce.</param>
/// <param name="results">The results.</param>
/// <param name="diagnosticInfos">The diagnostic infos.</param>
/// <returns>
/// Returns a <see cref="ResponseHeader"/> object
/// </returns>
public override ResponseHeader ActivateSession(
RequestHeader requestHeader,
SignatureData clientSignature,
SignedSoftwareCertificateCollection clientSoftwareCertificates,
StringCollection localeIds,
ExtensionObject userIdentityToken,
SignatureData userTokenSignature,
out byte[] serverNonce,
out StatusCodeCollection results,
out DiagnosticInfoCollection diagnosticInfos)
{
serverNonce = null;
results = null;
diagnosticInfos = null;
OperationContext context = ValidateRequest(requestHeader, RequestType.ActivateSession);
try
{
// validate client's software certificates.
List<SoftwareCertificate> softwareCertificates = new List<SoftwareCertificate>();
if (context.SecurityPolicyUri != SecurityPolicies.None)
{
bool diagnosticsExist = false;
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
diagnosticInfos = new DiagnosticInfoCollection();
}
results = new StatusCodeCollection();
diagnosticInfos = new DiagnosticInfoCollection();
foreach (SignedSoftwareCertificate signedCertificate in clientSoftwareCertificates)
{
SoftwareCertificate softwareCertificate = null;
ServiceResult result = SoftwareCertificate.Validate(
new CertificateValidator(),
signedCertificate.CertificateData,
out softwareCertificate);
if (ServiceResult.IsBad(result))
{
results.Add(result.Code);
// add diagnostics if requested.
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(ServerInternal, context, result);
diagnosticInfos.Add(diagnosticInfo);
diagnosticsExist = true;
}
}
else
{
softwareCertificates.Add(softwareCertificate);
results.Add(StatusCodes.Good);
// add diagnostics if requested.
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
diagnosticInfos.Add(null);
}
}
}
if (!diagnosticsExist && diagnosticInfos != null)
{
diagnosticInfos.Clear();
}
}
// check if certificates meet the server's requirements.
ValidateSoftwareCertificates(softwareCertificates);
// activate the session.
bool identityChanged = ServerInternal.SessionManager.ActivateSession(
context,
requestHeader.AuthenticationToken,
clientSignature,
softwareCertificates,
userIdentityToken,
userTokenSignature,
//.........这里部分代码省略.........
示例2: CreateSuccess
/// <summary>
/// Creates a place holder in the lists for the results.
/// </summary>
public static void CreateSuccess(
StatusCodeCollection results,
DiagnosticInfoCollection diagnosticInfos,
OperationContext context)
{
results.Add(StatusCodes.Good);
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
diagnosticInfos.Add(null);
}
}
示例3: CreateDiagnosticInfoCollection
/// <summary>
/// Creates a collection of diagnostics from a set of errors.
/// </summary>
public static DiagnosticInfoCollection CreateDiagnosticInfoCollection(
OperationContext context,
IList<ServiceResult> errors)
{
// all done if no diagnostics requested.
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) == 0)
{
return null;
}
// create diagnostics.
DiagnosticInfoCollection results = new DiagnosticInfoCollection(errors.Count);
foreach (ServiceResult error in errors)
{
if (ServiceResult.IsBad(error))
{
results.Add(new DiagnosticInfo(error, context.DiagnosticsMask, false, context.StringTable));
}
else
{
results.Add(null);
}
}
return results;
}
示例4: Browse
/// <summary>
/// Returns the set of references that meet the filter criteria.
/// </summary>
public virtual void Browse(
OperationContext context,
ViewDescription view,
uint maxReferencesPerNode,
BrowseDescriptionCollection nodesToBrowse,
out BrowseResultCollection results,
out DiagnosticInfoCollection diagnosticInfos)
{
if (context == null) throw new ArgumentNullException("context");
if (nodesToBrowse == null) throw new ArgumentNullException("nodesToBrowse");
if (view != null && !NodeId.IsNull(view.ViewId))
{
INodeManager viewManager = null;
object viewHandle = GetManagerHandle(view.ViewId, out viewManager);
if (viewHandle == null)
{
throw new ServiceResultException(StatusCodes.BadViewIdUnknown);
}
NodeMetadata metadata = viewManager.GetNodeMetadata(context, viewHandle, BrowseResultMask.NodeClass);
if (metadata == null || metadata.NodeClass != NodeClass.View)
{
throw new ServiceResultException(StatusCodes.BadViewIdUnknown);
}
view.Handle = viewHandle;
}
bool diagnosticsExist = false;
results = new BrowseResultCollection(nodesToBrowse.Count);
diagnosticInfos = new DiagnosticInfoCollection(nodesToBrowse.Count);
uint continuationPointsAssigned = 0;
for (int ii = 0; ii < nodesToBrowse.Count; ii++)
{
// check if request has timed out or been cancelled.
if (StatusCode.IsBad(context.OperationStatus))
{
// release all allocated continuation points.
foreach (BrowseResult current in results)
{
if (current != null && current.ContinuationPoint != null && current.ContinuationPoint.Length > 0)
{
ContinuationPoint cp = context.Session.RestoreContinuationPoint(current.ContinuationPoint);
cp.Dispose();
}
}
throw new ServiceResultException(context.OperationStatus);
}
BrowseDescription nodeToBrowse = nodesToBrowse[ii];
// initialize result.
BrowseResult result = new BrowseResult();
result.StatusCode = StatusCodes.Good;
results.Add(result);
ServiceResult error = null;
// need to trap unexpected exceptions to handle bugs in the node managers.
try
{
error = Browse(
context,
view,
maxReferencesPerNode,
continuationPointsAssigned < m_maxContinuationPointsPerBrowse,
nodeToBrowse,
result);
}
catch (Exception e)
{
error = ServiceResult.Create(e, StatusCodes.BadUnexpectedError, "Unexpected error browsing node.");
}
// check for continuation point.
if (result.ContinuationPoint != null && result.ContinuationPoint.Length > 0)
{
continuationPointsAssigned++;
}
// check for error.
result.StatusCode = error.StatusCode;
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
DiagnosticInfo diagnosticInfo = null;
if (error != null && error.Code != StatusCodes.Good)
{
diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, error);
diagnosticsExist = true;
//.........这里部分代码省略.........
示例5: CreateError
/// <summary>
/// Fills in the diagnostic information after an error.
/// </summary>
public static bool CreateError(
uint code,
StatusCodeCollection results,
DiagnosticInfoCollection diagnosticInfos,
OperationContext context)
{
ServiceResult error = new ServiceResult(code);
results.Add(error.Code);
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
diagnosticInfos.Add(new DiagnosticInfo(error, context.DiagnosticsMask, false, context.StringTable));
return true;
}
return false;
}
示例6: SetPublishingMode
/// <summary>
/// Sets the publishing mode for a set of subscriptions.
/// </summary>
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();
}
}
}
示例7: TranslateBrowsePathsToNodeIds
/// <summary>
/// Translates a start node id plus a relative paths into a node id.
/// </summary>
public virtual void TranslateBrowsePathsToNodeIds(
OperationContext context,
BrowsePathCollection browsePaths,
out BrowsePathResultCollection results,
out DiagnosticInfoCollection diagnosticInfos)
{
if (browsePaths == null)throw new ArgumentNullException("browsePaths");
bool diagnosticsExist = false;
results = new BrowsePathResultCollection(browsePaths.Count);
diagnosticInfos = new DiagnosticInfoCollection(browsePaths.Count);
for (int ii = 0; ii < browsePaths.Count; ii++)
{
// check if request has timed out or been cancelled.
if (StatusCode.IsBad(context.OperationStatus))
{
throw new ServiceResultException(context.OperationStatus);
}
BrowsePath browsePath = browsePaths[ii];
BrowsePathResult result = new BrowsePathResult();
result.StatusCode = StatusCodes.Good;
results.Add(result);
ServiceResult error = null;
// need to trap unexpected exceptions to handle bugs in the node managers.
try
{
error = TranslateBrowsePath(context, browsePath, result);
}
catch (Exception e)
{
error = ServiceResult.Create(e, StatusCodes.BadUnexpectedError, "Unexpected error translating browse path.");
}
if (ServiceResult.IsGood(error))
{
// check for no match.
if (result.Targets.Count == 0)
{
error = StatusCodes.BadNoMatch;
}
// put a placeholder for diagnostics.
else if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
diagnosticInfos.Add(null);
}
}
// check for error.
if (error != null && error.Code != StatusCodes.Good)
{
result.StatusCode = error.StatusCode;
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, error);
diagnosticInfos.Add(diagnosticInfo);
diagnosticsExist = true;
}
}
}
// clear the diagnostics array if no diagnostics requested or no errors occurred.
UpdateDiagnostics(context, diagnosticsExist, ref diagnosticInfos);
}
示例8: Write
/// <summary>
/// Writes a set of values.
/// </summary>
public virtual void Write(
OperationContext context,
WriteValueCollection nodesToWrite,
out StatusCodeCollection results,
out DiagnosticInfoCollection diagnosticInfos)
{
if (context == null) throw new ArgumentNullException("context");
if (nodesToWrite == null) throw new ArgumentNullException("nodesToWrite");
int count = nodesToWrite.Count;
bool diagnosticsExist = false;
results = new StatusCodeCollection(count);
diagnosticInfos = new DiagnosticInfoCollection(count);
// add placeholder for each result.
bool validItems = false;
for (int ii = 0; ii < count; ii++)
{
StatusCode result = StatusCodes.Good;
DiagnosticInfo diagnosticInfo = null;
// pre-validate and pre-parse parameter.
ServiceResult error = WriteValue.Validate(nodesToWrite[ii]);
// return error status.
if (ServiceResult.IsBad(error))
{
nodesToWrite[ii].Processed = true;
result = error.Code;
// add diagnostics if requested.
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, error);
diagnosticsExist = true;
}
}
// found at least one valid item.
else
{
nodesToWrite[ii].Processed = false;
validItems = true;
}
results.Add(result);
diagnosticInfos.Add(diagnosticInfo);
}
// call each node manager.
if (validItems)
{
List<ServiceResult> errors = new List<ServiceResult>(count);
errors.AddRange(new ServiceResult[count]);
foreach (INodeManager nodeManager in m_nodeManagers)
{
nodeManager.Write(
context,
nodesToWrite,
errors);
}
for (int ii = 0; ii < nodesToWrite.Count; ii++)
{
if (!nodesToWrite[ii].Processed)
{
errors[ii] = StatusCodes.BadNodeIdUnknown;
}
if (errors[ii] != null && errors[ii].Code != StatusCodes.Good)
{
results[ii] = errors[ii].Code;
// add diagnostics if requested.
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
diagnosticInfos[ii] = ServerUtils.CreateDiagnosticInfo(m_server, context, errors[ii]);
diagnosticsExist = true;
}
}
ServerUtils.ReportWriteValue(nodesToWrite[ii].NodeId, nodesToWrite[ii].Value, results[ii]);
}
}
// clear the diagnostics array if no diagnostics requested or no errors occurred.
UpdateDiagnostics(context, diagnosticsExist, ref diagnosticInfos);
}
示例9: HistoryUpdate
/// <summary>
/// Updates the history for a set of nodes.
/// </summary>
public virtual void HistoryUpdate(
OperationContext context,
ExtensionObjectCollection historyUpdateDetails,
out HistoryUpdateResultCollection results,
out DiagnosticInfoCollection diagnosticInfos)
{
Type detailsType = null;
List<HistoryUpdateDetails> nodesToUpdate = new List<HistoryUpdateDetails>();
// verify that all extension objects in the list have the same type.
foreach (ExtensionObject details in historyUpdateDetails)
{
if (detailsType == null)
{
detailsType = details.Body.GetType();
}
if (!ExtensionObject.IsNull(details))
{
nodesToUpdate.Add(details.Body as HistoryUpdateDetails);
}
}
// create result lists.
bool diagnosticsExist = false;
results = new HistoryUpdateResultCollection(nodesToUpdate.Count);
diagnosticInfos = new DiagnosticInfoCollection(nodesToUpdate.Count);
// pre-validate items.
bool validItems = false;
for (int ii = 0; ii < nodesToUpdate.Count; ii++)
{
HistoryUpdateResult result = null;
DiagnosticInfo diagnosticInfo = null;
// check the type of details parameter.
ServiceResult error = null;
if (nodesToUpdate[ii].GetType() != detailsType)
{
error = StatusCodes.BadHistoryOperationInvalid;
}
// pre-validate and pre-parse parameter.
else
{
error = HistoryUpdateDetails.Validate(nodesToUpdate[ii]);
}
// return error status.
if (ServiceResult.IsBad(error))
{
nodesToUpdate[ii].Processed = true;
result = new HistoryUpdateResult();
result.StatusCode = error.Code;
// add diagnostics if requested.
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, error);
diagnosticsExist = true;
}
}
// found at least one valid item.
else
{
nodesToUpdate[ii].Processed = false;
validItems = true;
}
results.Add(result);
diagnosticInfos.Add(diagnosticInfo);
}
// call each node manager.
if (validItems)
{
List<ServiceResult> errors = new List<ServiceResult>(results.Count);
for (int ii = 0; ii < nodesToUpdate.Count; ii++)
{
errors.Add(null);
}
foreach (INodeManager nodeManager in m_nodeManagers)
{
nodeManager.HistoryUpdate(
context,
detailsType,
nodesToUpdate,
results,
errors);
}
for (int ii = 0; ii < nodesToUpdate.Count; ii++)
//.........这里部分代码省略.........
示例10: Read
/// <summary>
/// Reads a set of nodes
/// </summary>
public virtual void Read(
OperationContext context,
double maxAge,
TimestampsToReturn timestampsToReturn,
ReadValueIdCollection nodesToRead,
out DataValueCollection values,
out DiagnosticInfoCollection diagnosticInfos)
{
if (nodesToRead == null) throw new ArgumentNullException("nodesToRead");
if (maxAge < 0)
{
throw new ServiceResultException(StatusCodes.BadMaxAgeInvalid);
}
if (timestampsToReturn < TimestampsToReturn.Source || timestampsToReturn > TimestampsToReturn.Neither)
{
throw new ServiceResultException(StatusCodes.BadTimestampsToReturnInvalid);
}
bool diagnosticsExist = false;
values = new DataValueCollection(nodesToRead.Count);
diagnosticInfos = new DiagnosticInfoCollection(nodesToRead.Count);
// create empty list of errors.
List<ServiceResult> errors = new List<ServiceResult>(values.Count);
for (int ii = 0; ii < nodesToRead.Count; ii++)
{
errors.Add(null);
}
// add placeholder for each result.
bool validItems = false;
Utils.Trace(
(int)Utils.TraceMasks.ServiceDetail,
"MasterNodeManager.Read - Count={0}",
nodesToRead.Count);
for (int ii = 0; ii < nodesToRead.Count; ii++)
{
DataValue value = null;
DiagnosticInfo diagnosticInfo = null;
// pre-validate and pre-parse parameter.
errors[ii] = ReadValueId.Validate(nodesToRead[ii]);
// return error status.
if (ServiceResult.IsBad(errors[ii]))
{
nodesToRead[ii].Processed = true;
}
// found at least one valid item.
else
{
nodesToRead[ii].Processed = false;
validItems = true;
}
values.Add(value);
diagnosticInfos.Add(diagnosticInfo);
}
// call each node manager.
if (validItems)
{
for (int ii = 0; ii < m_nodeManagers.Count; ii++)
{
Utils.Trace(
(int)Utils.TraceMasks.ServiceDetail,
"MasterNodeManager.Read - Calling NodeManager {0} of {1}",
ii,
m_nodeManagers.Count);
m_nodeManagers[ii].Read(
context,
maxAge,
nodesToRead,
values,
errors);
}
}
// process results.
for (int ii = 0; ii < nodesToRead.Count; ii++)
{
DataValue value = values[ii];
// set an error code for nodes that were not handled by any node manager.
if (!nodesToRead[ii].Processed)
{
value = values[ii] = new DataValue(StatusCodes.BadNodeIdUnknown, DateTime.UtcNow);
errors[ii] = new ServiceResult(values[ii].StatusCode);
}
//.........这里部分代码省略.........
示例11: HistoryRead
/// <summary>
/// Reads the history of a set of items.
/// </summary>
public virtual void HistoryRead(
OperationContext context,
ExtensionObject historyReadDetails,
TimestampsToReturn timestampsToReturn,
bool releaseContinuationPoints,
HistoryReadValueIdCollection nodesToRead,
out HistoryReadResultCollection results,
out DiagnosticInfoCollection diagnosticInfos)
{
// validate history details parameter.
if (ExtensionObject.IsNull(historyReadDetails))
{
throw new ServiceResultException(StatusCodes.BadHistoryOperationInvalid);
}
HistoryReadDetails details = historyReadDetails.Body as HistoryReadDetails;
if (details == null)
{
throw new ServiceResultException(StatusCodes.BadHistoryOperationUnsupported);
}
// create result lists.
bool diagnosticsExist = false;
results = new HistoryReadResultCollection(nodesToRead.Count);
diagnosticInfos = new DiagnosticInfoCollection(nodesToRead.Count);
// pre-validate items.
bool validItems = false;
for (int ii = 0; ii < nodesToRead.Count; ii++)
{
HistoryReadResult result = null;
DiagnosticInfo diagnosticInfo = null;
// pre-validate and pre-parse parameter.
ServiceResult error = HistoryReadValueId.Validate(nodesToRead[ii]);
// return error status.
if (ServiceResult.IsBad(error))
{
nodesToRead[ii].Processed = true;
result = new HistoryReadResult();
result.StatusCode = error.Code;
// add diagnostics if requested.
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, error);
diagnosticsExist = true;
}
}
// found at least one valid item.
else
{
nodesToRead[ii].Processed = false;
validItems = true;
}
results.Add(result);
diagnosticInfos.Add(diagnosticInfo);
}
// call each node manager.
if (validItems)
{
List<ServiceResult> errors = new List<ServiceResult>(results.Count);
for (int ii = 0; ii < nodesToRead.Count; ii++)
{
errors.Add(null);
}
foreach (INodeManager nodeManager in m_nodeManagers)
{
nodeManager.HistoryRead(
context,
details,
timestampsToReturn,
releaseContinuationPoints,
nodesToRead,
results,
errors);
}
for (int ii = 0; ii < nodesToRead.Count; ii++)
{
HistoryReadResult result = results[ii];
// set an error code for nodes that were not handled by any node manager.
if (!nodesToRead[ii].Processed)
{
nodesToRead[ii].Processed = true;
result = results[ii] = new HistoryReadResult();
result.StatusCode = StatusCodes.BadNodeIdUnknown;
errors[ii] = results[ii].StatusCode;
//.........这里部分代码省略.........
示例12: BrowseNext
/// <summary>
/// Continues a browse operation that was previously halted.
/// </summary>
public virtual void BrowseNext(
OperationContext context,
bool releaseContinuationPoints,
ByteStringCollection continuationPoints,
out BrowseResultCollection results,
out DiagnosticInfoCollection diagnosticInfos)
{
if (context == null) throw new ArgumentNullException("context");
if (continuationPoints == null) throw new ArgumentNullException("continuationPoints");
bool diagnosticsExist = false;
results = new BrowseResultCollection(continuationPoints.Count);
diagnosticInfos = new DiagnosticInfoCollection(continuationPoints.Count);
uint continuationPointsAssigned = 0;
for (int ii = 0; ii < continuationPoints.Count; ii++)
{
ContinuationPoint cp = null;
// check if request has timed out or been cancelled.
if (StatusCode.IsBad(context.OperationStatus))
{
// release all allocated continuation points.
foreach (BrowseResult current in results)
{
if (current != null && current.ContinuationPoint != null && current.ContinuationPoint.Length > 0)
{
cp = context.Session.RestoreContinuationPoint(current.ContinuationPoint);
cp.Dispose();
}
}
throw new ServiceResultException(context.OperationStatus);
}
// find the continuation point.
cp = context.Session.RestoreContinuationPoint(continuationPoints[ii]);
// initialize result.
BrowseResult result = new BrowseResult();
result.StatusCode = StatusCodes.Good;
results.Add(result);
// check if simply releasing the continuation point.
if (releaseContinuationPoints)
{
if (cp != null)
{
cp.Dispose();
cp = null;
}
continue;
}
ServiceResult error = null;
// check if continuation point has expired.
if (cp == null)
{
error = StatusCodes.BadContinuationPointInvalid;
}
if (cp != null)
{
// need to trap unexpected exceptions to handle bugs in the node managers.
try
{
ReferenceDescriptionCollection references = result.References;
error = FetchReferences(
context,
continuationPointsAssigned < m_maxContinuationPointsPerBrowse,
ref cp,
ref references);
result.References = references;
}
catch (Exception e)
{
error = ServiceResult.Create(e, StatusCodes.BadUnexpectedError, "Unexpected error browsing node.");
}
// check for continuation point.
if (result.ContinuationPoint != null && result.ContinuationPoint.Length > 0)
{
continuationPointsAssigned++;
}
}
// check for error.
result.StatusCode = error.StatusCode;
if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0)
{
DiagnosticInfo diagnosticInfo = null;
//.........这里部分代码省略.........
示例13: ReadDiagnosticInfoArray
/// <summary>
/// Reads an DiagnosticInfo array from the stream.
/// </summary>
public DiagnosticInfoCollection ReadDiagnosticInfoArray(string fieldName)
{
int length = ReadArrayLength();
if (length == -1)
{
return null;
}
DiagnosticInfoCollection values = new DiagnosticInfoCollection(length);
for (int ii = 0; ii < length; ii++)
{
values.Add(ReadDiagnosticInfo(null));
}
return values;
}
示例14: DeleteSubscriptions
/// <summary>
/// Deletes group of subscriptions.
/// </summary>
public void DeleteSubscriptions(
OperationContext context,
UInt32Collection subscriptionIds,
out StatusCodeCollection results,
out DiagnosticInfoCollection diagnosticInfos)
{
bool diagnosticsExist = false;
results = new StatusCodeCollection(subscriptionIds.Count);
diagnosticInfos = new DiagnosticInfoCollection(subscriptionIds.Count);
foreach (uint subscriptionId in subscriptionIds)
{
try
{
StatusCode result = DeleteSubscription(context, subscriptionId);
results.Add(result);
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();
}
}
示例15: ReadDiagnosticInfoArray
/// <summary>
/// Reads an DiagnosticInfo array from the stream.
/// </summary>
public DiagnosticInfoCollection ReadDiagnosticInfoArray(string fieldName)
{
bool isNil = false;
DiagnosticInfoCollection values = new DiagnosticInfoCollection();
if (BeginField(fieldName, true, out isNil))
{
PushNamespace(Namespaces.OpcUaXsd);
while (MoveToElement("DiagnosticInfo"))
{
values.Add(ReadDiagnosticInfo("DiagnosticInfo"));
}
// check the length.
if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count)
{
throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded);
}
PopNamespace();
EndField(fieldName);
return values;
}
if (isNil)
{
return null;
}
return values;
}