Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / SMDiagnostics / System / ServiceModel / Diagnostics / ExceptionUtility.cs / 1305376 / ExceptionUtility.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.ServiceModel.Diagnostics
{
using System;
using System.Diagnostics;
using System.Runtime;
using System.Runtime.ConstrainedExecution;
using System.Runtime.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
using System.Runtime.Serialization;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Collections;
class ExceptionUtility
{
const string ExceptionStackAsStringKey = "System.ServiceModel.Diagnostics.ExceptionUtility.ExceptionStackAsString";
// This field should be only used for debug build.
internal static ExceptionUtility mainInstance;
DiagnosticTrace diagnosticTrace;
string name;
string eventSourceName;
[ThreadStatic]
static Guid activityId;
[ThreadStatic]
static bool useStaticActivityId;
[Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.ExceptionUtility instead")]
internal ExceptionUtility(string name, string eventSourceName, object diagnosticTrace)
{
this.diagnosticTrace = (DiagnosticTrace)diagnosticTrace;
this.name = name;
this.eventSourceName = eventSourceName;
}
[Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.ExceptionUtility instead")]
[MethodImpl(MethodImplOptions.NoInlining)]
#pragma warning disable 56500
internal void TraceFailFast(string message)
{
EventLogger logger = null;
try
{
#pragma warning disable 618
logger = new EventLogger(this.eventSourceName, this.diagnosticTrace);
#pragma warning restore 618
}
finally
{
#pragma warning disable 618
TraceFailFast(message, logger);
#pragma warning restore 618
}
}
// Fail-- Event Log entry will be generated.
// To force a Watson on a dev machine, do the following:
// 1. Set \HKLM\SOFTWARE\Microsoft\PCHealth\ErrorReporting ForceQueueMode = 0
// 2. In the command environment, set COMPLUS_DbgJitDebugLaunchSetting=0
[Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.ExceptionUtility instead")]
[MethodImpl(MethodImplOptions.NoInlining)]
internal static void TraceFailFast(string message, EventLogger logger)
{
try
{
if (logger != null)
{
string stackTrace = null;
try
{
stackTrace = new StackTrace().ToString();
}
catch (Exception exception)
{
stackTrace = exception.Message;
}
finally
{
logger.LogEvent(TraceEventType.Critical,
EventLogCategory.FailFast,
EventLogEventId.FailFast,
message,
stackTrace);
}
}
}
catch (Exception e)
{
if (logger != null)
{
logger.LogEvent(TraceEventType.Critical,
EventLogCategory.FailFast,
EventLogEventId.FailFastException,
e.ToString());
}
throw;
}
}
#pragma warning restore 56500
[Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.ExceptionUtility instead")]
internal void TraceFailFastException(Exception exception)
{
TraceFailFast(exception == null ? null : exception.ToString());
}
internal Exception ThrowHelper(Exception exception, TraceEventType eventType, TraceRecord extendedData)
{
#pragma warning disable 618
bool shouldTrace = (this.diagnosticTrace != null && this.diagnosticTrace.ShouldTrace(eventType));
#pragma warning restore 618
if (shouldTrace)
{
using (ExceptionUtility.useStaticActivityId ? Activity.CreateActivity(ExceptionUtility.activityId) : null)
{
this.diagnosticTrace.TraceEvent(eventType, DiagnosticsTraceCode.ThrowingException, DiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "ThrowingException"), TraceSR.GetString(TraceSR.ThrowingException), extendedData, exception, null);
}
}
#if DEBUG
string stack = exception.StackTrace;
#else
// Avoid doing this for perf reasons unless we're already taking the hit for tracing.
string stack = (shouldTrace ? exception.StackTrace : null);
#endif
if (!string.IsNullOrEmpty(stack))
{
IDictionary data = exception.Data;
if (data != null && !data.IsReadOnly && !data.IsFixedSize)
{
object existingString = data[ExceptionStackAsStringKey];
string stackString = existingString == null ? "" : existingString as string;
if (stackString != null)
{
stackString = string.Concat(stackString, stackString.Length == 0 ? "" : Environment.NewLine, "throw", Environment.NewLine, stack, Environment.NewLine, "catch", Environment.NewLine);
data[ExceptionStackAsStringKey] = stackString;
}
}
}
return exception;
}
internal Exception ThrowHelper(Exception exception, TraceEventType eventType)
{
return this.ThrowHelper(exception, eventType, null);
}
internal ArgumentException ThrowHelperArgument(string message)
{
return (ArgumentException)this.ThrowHelperError(new ArgumentException(message));
}
internal ArgumentException ThrowHelperArgument(string paramName, string message)
{
return (ArgumentException)this.ThrowHelperError(new ArgumentException(message, paramName));
}
internal ArgumentNullException ThrowHelperArgumentNull(string paramName)
{
return (ArgumentNullException)this.ThrowHelperError(new ArgumentNullException(paramName));
}
internal ArgumentNullException ThrowHelperArgumentNull(string paramName, string message)
{
return (ArgumentNullException)this.ThrowHelperError(new ArgumentNullException(paramName, message));
}
internal Exception ThrowHelperFatal(string message, Exception innerException)
{
return this.ThrowHelperError(new FatalException(message, innerException));
}
internal Exception ThrowHelperInternal(bool fatal)
{
return fatal ? Fx.AssertAndThrowFatal("Fatal InternalException should never be thrown.") : Fx.AssertAndThrow("InternalException should never be thrown.");
}
internal Exception ThrowHelperCallback(string message, Exception innerException)
{
return this.ThrowHelperCritical(new CallbackException(message, innerException));
}
internal Exception ThrowHelperCallback(Exception innerException)
{
return this.ThrowHelperCallback(TraceSR.GetString(TraceSR.GenericCallbackException), innerException);
}
internal Exception ThrowHelperCritical(Exception exception)
{
return this.ThrowHelper(exception, TraceEventType.Critical);
}
internal Exception ThrowHelperError(Exception exception)
{
return this.ThrowHelper(exception, TraceEventType.Error);
}
internal Exception ThrowHelperWarning(Exception exception)
{
return this.ThrowHelper(exception, TraceEventType.Warning);
}
internal void TraceHandledException(Exception exception, TraceEventType eventType)
{
#pragma warning disable 618
bool shouldTrace = (this.diagnosticTrace != null && this.diagnosticTrace.ShouldTrace(eventType));
#pragma warning restore 618
if (shouldTrace)
{
using (ExceptionUtility.useStaticActivityId ? Activity.CreateActivity(ExceptionUtility.activityId) : null)
{
this.diagnosticTrace.TraceEvent(eventType, DiagnosticsTraceCode.TraceHandledException, DiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "TraceHandledException"), TraceSR.GetString(TraceSR.TraceHandledException), null, exception, null);
}
}
}
// On a single thread, these functions will complete just fine
// and don't need to worry about locking issues because the effected
// variables are ThreadStatic.
internal static void UseActivityId(Guid activityId)
{
ExceptionUtility.activityId = activityId;
ExceptionUtility.useStaticActivityId = true;
}
internal static void ClearActivityId()
{
ExceptionUtility.useStaticActivityId = false;
ExceptionUtility.activityId = Guid.Empty;
}
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static bool IsInfrastructureException(Exception exception)
{
return exception != null && (exception is ThreadAbortException || exception is AppDomainUnloadedException);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AnonymousIdentificationSection.cs
- ResourceReferenceExpressionConverter.cs
- ArgIterator.cs
- SettingsContext.cs
- GroupItemAutomationPeer.cs
- WebBrowserDesigner.cs
- AutoGeneratedField.cs
- LogWriteRestartAreaState.cs
- SiteMapPath.cs
- GetWinFXPath.cs
- MailWebEventProvider.cs
- VectorConverter.cs
- DataGridColumn.cs
- SectionInformation.cs
- OracleTransaction.cs
- DialogResultConverter.cs
- TransformValueSerializer.cs
- _HTTPDateParse.cs
- SendMessageChannelCache.cs
- XmlSerializationWriter.cs
- SudsParser.cs
- MembershipPasswordException.cs
- SystemInformation.cs
- HttpNamespaceReservationInstallComponent.cs
- UriExt.cs
- SchemaTableColumn.cs
- SecureConversationDriver.cs
- SqlCharStream.cs
- SynchronousChannelMergeEnumerator.cs
- SafeThemeHandle.cs
- UnionCodeGroup.cs
- DocobjHost.cs
- HwndSubclass.cs
- WinEventWrap.cs
- ObjectListCommand.cs
- Codec.cs
- XsdValidatingReader.cs
- EmbeddedMailObject.cs
- DbProviderFactory.cs
- CqlParser.cs
- StringPropertyBuilder.cs
- DbParameterCollection.cs
- FormViewModeEventArgs.cs
- SapiAttributeParser.cs
- ScrollContentPresenter.cs
- RawMouseInputReport.cs
- TextTreeInsertUndoUnit.cs
- X509AsymmetricSecurityKey.cs
- TextTabProperties.cs
- BasicBrowserDialog.cs
- RegexRunner.cs
- MimeReturn.cs
- RelationshipSet.cs
- ConditionChanges.cs
- XpsInterleavingPolicy.cs
- MailDefinition.cs
- UnauthorizedAccessException.cs
- Operator.cs
- VectorAnimation.cs
- ResourceContainerWrapper.cs
- DSACryptoServiceProvider.cs
- AggregateNode.cs
- ListViewTableRow.cs
- LineSegment.cs
- DiscardableAttribute.cs
- EncryptedPackageFilter.cs
- UpdateTracker.cs
- WebPartConnectionsCloseVerb.cs
- TextBoxDesigner.cs
- SqlCacheDependencyDatabaseCollection.cs
- EndOfStreamException.cs
- WebFormDesignerActionService.cs
- SynchronizedKeyedCollection.cs
- GridViewPageEventArgs.cs
- DependsOnAttribute.cs
- GlyphsSerializer.cs
- ThemeDirectoryCompiler.cs
- hwndwrapper.cs
- ComplexLine.cs
- TemplateControlBuildProvider.cs
- MemoryRecordBuffer.cs
- HtmlEncodedRawTextWriter.cs
- WebPartConnection.cs
- StringExpressionSet.cs
- XmlAggregates.cs
- NativeRightsManagementAPIsStructures.cs
- BroadcastEventHelper.cs
- IDReferencePropertyAttribute.cs
- BinaryUtilClasses.cs
- _NegotiateClient.cs
- InvalidAsynchronousStateException.cs
- srgsitem.cs
- CodeConditionStatement.cs
- VersionPair.cs
- _SslStream.cs
- WebPartRestoreVerb.cs
- DistinctQueryOperator.cs
- input.cs
- HierarchicalDataBoundControlAdapter.cs
- ColumnCollection.cs