Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Management / SimpleMailWebEventProvider.cs / 1305376 / SimpleMailWebEventProvider.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Management { using System.Configuration; using System.Configuration.Provider; using System.Collections.Specialized; using System.Web.Util; using System.Net.Mail; using System.Globalization; using System.Web.Configuration; using System.Text; using System.IO; using System.Runtime.Remoting.Messaging; using System.Security.Permissions; using System.Threading; public sealed class SimpleMailWebEventProvider : MailWebEventProvider, IInternalWebEventProvider { const int DefaultMaxEventLength = 8 * 1024; const int MessageIdDiscard = 100; const int MessageIdEventsToDrop = 101; static string s_header_warnings = SR.GetString(SR.MailWebEventProvider_Warnings); static string s_header_summary = SR.GetString(SR.MailWebEventProvider_Summary); static string s_header_app_info = SR.GetString(SR.MailWebEventProvider_Application_Info); static string s_header_events = SR.GetString(SR.MailWebEventProvider_Events); string _separator = "---------------\n"; string _bodyHeader; string _bodyFooter; int _maxEventLength = DefaultMaxEventLength; // in no of chars int _nonBufferNotificationSequence = 0; internal SimpleMailWebEventProvider() { } public override void Initialize(string name, NameValueCollection config) { string temp = null; Debug.Trace("SimpleMailWebEventProvider", "Initializing: name=" + name); ProviderUtil.GetAndRemoveStringAttribute(config, "bodyHeader", name, ref _bodyHeader); if (_bodyHeader != null) { _bodyHeader += "\n"; } ProviderUtil.GetAndRemoveStringAttribute(config, "bodyFooter", name, ref _bodyFooter); if (_bodyFooter != null) { _bodyFooter += "\n"; } ProviderUtil.GetAndRemoveStringAttribute(config, "separator", name, ref temp); if (temp != null) { _separator = temp + "\n"; } ProviderUtil.GetAndRemovePositiveOrInfiniteAttribute(config, "maxEventLength", name, ref _maxEventLength); base.Initialize(name, config); } void GenerateWarnings(StringBuilder sb, DateTime lastFlush, int discardedSinceLastFlush, int seq, int eventsToDrop) { if (!UseBuffering) { return; } bool headerAdded = false; bool hasWarnings = false; // This warning is issued only in the 1st message (vswhidbey 217578) if (discardedSinceLastFlush != 0 && seq == MessageSequenceBase) { sb.Append(s_header_warnings); sb.Append("\n"); sb.Append(_separator); headerAdded = true; sb.Append(SR.GetString(SR.MailWebEventProvider_discard_warning, MessageIdDiscard.ToString(CultureInfo.InstalledUICulture), discardedSinceLastFlush.ToString(CultureInfo.InstalledUICulture), lastFlush.ToString("r", CultureInfo.InstalledUICulture))); sb.Append("\n\n"); hasWarnings = true; } if (eventsToDrop > 0) { if (!headerAdded) { sb.Append(s_header_warnings); sb.Append("\n"); sb.Append(_separator); headerAdded = true; } sb.Append(SR.GetString(SR.MailWebEventProvider_events_drop_warning, MessageIdEventsToDrop.ToString(CultureInfo.InstalledUICulture), eventsToDrop.ToString(CultureInfo.InstalledUICulture))); sb.Append("\n\n"); hasWarnings = true; } if (hasWarnings) { sb.Append("\n"); } } void GenerateApplicationInformation(StringBuilder sb) { sb.Append(s_header_app_info); sb.Append("\n"); sb.Append(_separator); sb.Append(WebBaseEvent.ApplicationInformation.ToString()); sb.Append("\n\n"); } void GenerateSummary(StringBuilder sb, int firstEvent, int lastEvent, int eventsInNotif, int eventsInBuffer) { if (!UseBuffering) { return; } sb.Append(s_header_summary); sb.Append("\n"); sb.Append(_separator); // The sequence numbers will be displayed as one-baesd. firstEvent++; lastEvent++; sb.Append(SR.GetString(SR.MailWebEventProvider_summary_body, firstEvent.ToString(CultureInfo.InstalledUICulture), lastEvent.ToString(CultureInfo.InstalledUICulture), eventsInNotif.ToString(CultureInfo.InstalledUICulture), eventsInBuffer.ToString(CultureInfo.InstalledUICulture))); sb.Append("\n\n"); sb.Append("\n"); } string GenerateBody(WebBaseEventCollection events, int begin, DateTime lastFlush, int discardedSinceLastFlush, int eventsInBuffer, int messageSequence, int eventsInNotification, int eventsLostDueToMessageLimit) { StringBuilder sb = new StringBuilder(); int totalEvents = events.Count; if (_bodyHeader != null) { sb.Append(_bodyHeader); } // Warnings GenerateWarnings(sb, lastFlush, discardedSinceLastFlush, messageSequence, eventsLostDueToMessageLimit); // Event Summary GenerateSummary(sb, begin, begin + totalEvents - 1, eventsInNotification, eventsInBuffer); // Application Info Debug.Assert(events.Count > 0, "events.Count > 0"); GenerateApplicationInformation(sb); // Please note that it's a text message, and thus we shouldn't need to HtmlEncode it. for (int i = 0; i < totalEvents; i++) { WebBaseEvent eventRaised = events[i]; string details = eventRaised.ToString(false, true); if (_maxEventLength != ProviderUtil.Infinite && details.Length > _maxEventLength) { details = details.Substring(0, _maxEventLength); } if (i == 0) { sb.Append(s_header_events); sb.Append("\n"); sb.Append(_separator); } sb.Append(details); sb.Append("\n"); sb.Append(_separator); } if (_bodyFooter != null) { sb.Append(_bodyFooter); } return sb.ToString(); } internal override void SendMessage(WebBaseEvent eventRaised) { WebBaseEventCollection events = new WebBaseEventCollection(eventRaised); SendMessageInternal( events, // events Interlocked.Increment(ref _nonBufferNotificationSequence), // notificationSequence 0, // begin DateTime.MinValue, // lastFlush 0, // discardedSinceLastFlush 0, // eventsInBuffer MessageSequenceBase,// messageSequence 1, // messagesInNotification 1, // eventsInNotification 0); // eventsLostDueToMessageLimit } internal override void SendMessage(WebBaseEventCollection events, WebEventBufferFlushInfo flushInfo, int eventsInNotification, int eventsRemaining, int messagesInNotification, int eventsLostDueToMessageLimit, int messageSequence, int eventsSent, out bool fatalError) { SendMessageInternal(events, flushInfo.NotificationSequence, eventsSent, flushInfo.LastNotificationUtc, flushInfo.EventsDiscardedSinceLastNotification, flushInfo.EventsInBuffer, messageSequence, messagesInNotification, eventsInNotification, eventsLostDueToMessageLimit); fatalError = false; } void SendMessageInternal(WebBaseEventCollection events, int notificationSequence, int begin, DateTime lastFlush, int discardedSinceLastFlush, int eventsInBuffer, int messageSequence, int messagesInNotification, int eventsInNotification, int eventsLostDueToMessageLimit) { using (MailMessage msg = GetMessage()) { // Don't report eventsLostDueToMessageLimit unless it's the last message in this notification if (messageSequence != messagesInNotification) { eventsLostDueToMessageLimit = 0; } msg.Body = GenerateBody(events, begin, lastFlush, discardedSinceLastFlush, eventsInBuffer, messageSequence, eventsInNotification, eventsLostDueToMessageLimit); msg.Subject = GenerateSubject(notificationSequence, messageSequence, events, events.Count); SendMail(msg); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Management { using System.Configuration; using System.Configuration.Provider; using System.Collections.Specialized; using System.Web.Util; using System.Net.Mail; using System.Globalization; using System.Web.Configuration; using System.Text; using System.IO; using System.Runtime.Remoting.Messaging; using System.Security.Permissions; using System.Threading; public sealed class SimpleMailWebEventProvider : MailWebEventProvider, IInternalWebEventProvider { const int DefaultMaxEventLength = 8 * 1024; const int MessageIdDiscard = 100; const int MessageIdEventsToDrop = 101; static string s_header_warnings = SR.GetString(SR.MailWebEventProvider_Warnings); static string s_header_summary = SR.GetString(SR.MailWebEventProvider_Summary); static string s_header_app_info = SR.GetString(SR.MailWebEventProvider_Application_Info); static string s_header_events = SR.GetString(SR.MailWebEventProvider_Events); string _separator = "---------------\n"; string _bodyHeader; string _bodyFooter; int _maxEventLength = DefaultMaxEventLength; // in no of chars int _nonBufferNotificationSequence = 0; internal SimpleMailWebEventProvider() { } public override void Initialize(string name, NameValueCollection config) { string temp = null; Debug.Trace("SimpleMailWebEventProvider", "Initializing: name=" + name); ProviderUtil.GetAndRemoveStringAttribute(config, "bodyHeader", name, ref _bodyHeader); if (_bodyHeader != null) { _bodyHeader += "\n"; } ProviderUtil.GetAndRemoveStringAttribute(config, "bodyFooter", name, ref _bodyFooter); if (_bodyFooter != null) { _bodyFooter += "\n"; } ProviderUtil.GetAndRemoveStringAttribute(config, "separator", name, ref temp); if (temp != null) { _separator = temp + "\n"; } ProviderUtil.GetAndRemovePositiveOrInfiniteAttribute(config, "maxEventLength", name, ref _maxEventLength); base.Initialize(name, config); } void GenerateWarnings(StringBuilder sb, DateTime lastFlush, int discardedSinceLastFlush, int seq, int eventsToDrop) { if (!UseBuffering) { return; } bool headerAdded = false; bool hasWarnings = false; // This warning is issued only in the 1st message (vswhidbey 217578) if (discardedSinceLastFlush != 0 && seq == MessageSequenceBase) { sb.Append(s_header_warnings); sb.Append("\n"); sb.Append(_separator); headerAdded = true; sb.Append(SR.GetString(SR.MailWebEventProvider_discard_warning, MessageIdDiscard.ToString(CultureInfo.InstalledUICulture), discardedSinceLastFlush.ToString(CultureInfo.InstalledUICulture), lastFlush.ToString("r", CultureInfo.InstalledUICulture))); sb.Append("\n\n"); hasWarnings = true; } if (eventsToDrop > 0) { if (!headerAdded) { sb.Append(s_header_warnings); sb.Append("\n"); sb.Append(_separator); headerAdded = true; } sb.Append(SR.GetString(SR.MailWebEventProvider_events_drop_warning, MessageIdEventsToDrop.ToString(CultureInfo.InstalledUICulture), eventsToDrop.ToString(CultureInfo.InstalledUICulture))); sb.Append("\n\n"); hasWarnings = true; } if (hasWarnings) { sb.Append("\n"); } } void GenerateApplicationInformation(StringBuilder sb) { sb.Append(s_header_app_info); sb.Append("\n"); sb.Append(_separator); sb.Append(WebBaseEvent.ApplicationInformation.ToString()); sb.Append("\n\n"); } void GenerateSummary(StringBuilder sb, int firstEvent, int lastEvent, int eventsInNotif, int eventsInBuffer) { if (!UseBuffering) { return; } sb.Append(s_header_summary); sb.Append("\n"); sb.Append(_separator); // The sequence numbers will be displayed as one-baesd. firstEvent++; lastEvent++; sb.Append(SR.GetString(SR.MailWebEventProvider_summary_body, firstEvent.ToString(CultureInfo.InstalledUICulture), lastEvent.ToString(CultureInfo.InstalledUICulture), eventsInNotif.ToString(CultureInfo.InstalledUICulture), eventsInBuffer.ToString(CultureInfo.InstalledUICulture))); sb.Append("\n\n"); sb.Append("\n"); } string GenerateBody(WebBaseEventCollection events, int begin, DateTime lastFlush, int discardedSinceLastFlush, int eventsInBuffer, int messageSequence, int eventsInNotification, int eventsLostDueToMessageLimit) { StringBuilder sb = new StringBuilder(); int totalEvents = events.Count; if (_bodyHeader != null) { sb.Append(_bodyHeader); } // Warnings GenerateWarnings(sb, lastFlush, discardedSinceLastFlush, messageSequence, eventsLostDueToMessageLimit); // Event Summary GenerateSummary(sb, begin, begin + totalEvents - 1, eventsInNotification, eventsInBuffer); // Application Info Debug.Assert(events.Count > 0, "events.Count > 0"); GenerateApplicationInformation(sb); // Please note that it's a text message, and thus we shouldn't need to HtmlEncode it. for (int i = 0; i < totalEvents; i++) { WebBaseEvent eventRaised = events[i]; string details = eventRaised.ToString(false, true); if (_maxEventLength != ProviderUtil.Infinite && details.Length > _maxEventLength) { details = details.Substring(0, _maxEventLength); } if (i == 0) { sb.Append(s_header_events); sb.Append("\n"); sb.Append(_separator); } sb.Append(details); sb.Append("\n"); sb.Append(_separator); } if (_bodyFooter != null) { sb.Append(_bodyFooter); } return sb.ToString(); } internal override void SendMessage(WebBaseEvent eventRaised) { WebBaseEventCollection events = new WebBaseEventCollection(eventRaised); SendMessageInternal( events, // events Interlocked.Increment(ref _nonBufferNotificationSequence), // notificationSequence 0, // begin DateTime.MinValue, // lastFlush 0, // discardedSinceLastFlush 0, // eventsInBuffer MessageSequenceBase,// messageSequence 1, // messagesInNotification 1, // eventsInNotification 0); // eventsLostDueToMessageLimit } internal override void SendMessage(WebBaseEventCollection events, WebEventBufferFlushInfo flushInfo, int eventsInNotification, int eventsRemaining, int messagesInNotification, int eventsLostDueToMessageLimit, int messageSequence, int eventsSent, out bool fatalError) { SendMessageInternal(events, flushInfo.NotificationSequence, eventsSent, flushInfo.LastNotificationUtc, flushInfo.EventsDiscardedSinceLastNotification, flushInfo.EventsInBuffer, messageSequence, messagesInNotification, eventsInNotification, eventsLostDueToMessageLimit); fatalError = false; } void SendMessageInternal(WebBaseEventCollection events, int notificationSequence, int begin, DateTime lastFlush, int discardedSinceLastFlush, int eventsInBuffer, int messageSequence, int messagesInNotification, int eventsInNotification, int eventsLostDueToMessageLimit) { using (MailMessage msg = GetMessage()) { // Don't report eventsLostDueToMessageLimit unless it's the last message in this notification if (messageSequence != messagesInNotification) { eventsLostDueToMessageLimit = 0; } msg.Body = GenerateBody(events, begin, lastFlush, discardedSinceLastFlush, eventsInBuffer, messageSequence, eventsInNotification, eventsLostDueToMessageLimit); msg.Subject = GenerateSubject(notificationSequence, messageSequence, events, events.Count); SendMail(msg); } } } } // 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
- PropertyItemInternal.cs
- DataListCommandEventArgs.cs
- IssuedSecurityTokenProvider.cs
- DeclarationUpdate.cs
- DateRangeEvent.cs
- sqlinternaltransaction.cs
- RenamedEventArgs.cs
- OciHandle.cs
- Model3D.cs
- EpmSyndicationContentSerializer.cs
- CodeSubDirectory.cs
- CategoryNameCollection.cs
- PersonalizationStateInfoCollection.cs
- UnicodeEncoding.cs
- MimeTypeAttribute.cs
- NetWebProxyFinder.cs
- ListParagraph.cs
- ContextMenu.cs
- TailCallAnalyzer.cs
- CompiledIdentityConstraint.cs
- SafeLibraryHandle.cs
- CodeChecksumPragma.cs
- XmlNodeChangedEventArgs.cs
- DesignDataSource.cs
- Vector3DIndependentAnimationStorage.cs
- CatalogPart.cs
- StorageEntityContainerMapping.cs
- NonSerializedAttribute.cs
- BitmapEffect.cs
- ConfigurationManagerHelper.cs
- TextProviderWrapper.cs
- AccessControlEntry.cs
- LineUtil.cs
- X509CertificateInitiatorClientCredential.cs
- ComEventsSink.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- GPRECTF.cs
- WindowInteropHelper.cs
- Label.cs
- WebPartEditorApplyVerb.cs
- DataIdProcessor.cs
- TickBar.cs
- ParameterCollection.cs
- EmptyEnumerator.cs
- LocalFileSettingsProvider.cs
- DataBoundControlHelper.cs
- Attributes.cs
- OleDbRowUpdatingEvent.cs
- IconHelper.cs
- HTMLTagNameToTypeMapper.cs
- StrongBox.cs
- DocumentViewerBaseAutomationPeer.cs
- PageHandlerFactory.cs
- RangeValueProviderWrapper.cs
- KeyValueInternalCollection.cs
- DataGridItemAutomationPeer.cs
- ObjectMemberMapping.cs
- ChunkedMemoryStream.cs
- NameTable.cs
- SequentialUshortCollection.cs
- TableColumn.cs
- Geometry3D.cs
- DeclarativeCatalogPartDesigner.cs
- RemotingSurrogateSelector.cs
- AQNBuilder.cs
- WSFederationHttpBinding.cs
- InvokeBase.cs
- RadioButtonBaseAdapter.cs
- WebHeaderCollection.cs
- xmlglyphRunInfo.cs
- XmlObjectSerializerWriteContext.cs
- BufferedReadStream.cs
- AuthenticationService.cs
- SqlCaseSimplifier.cs
- PopupRoot.cs
- WorkflowApplicationAbortedEventArgs.cs
- UIPermission.cs
- WebPageTraceListener.cs
- Point3DIndependentAnimationStorage.cs
- XPathCompileException.cs
- DependencyPropertyKind.cs
- MetadataSource.cs
- SqlDataSourceView.cs
- WebPartMinimizeVerb.cs
- KerberosTicketHashIdentifierClause.cs
- ReadOnlyDictionary.cs
- SmtpNegotiateAuthenticationModule.cs
- SafeFileHandle.cs
- WriteFileContext.cs
- RemotingAttributes.cs
- XamlFigureLengthSerializer.cs
- GridViewDeletedEventArgs.cs
- ScriptingAuthenticationServiceSection.cs
- DrawingServices.cs
- SerializationEventsCache.cs
- MatrixTransform3D.cs
- TypeListConverter.cs
- ComplexObject.cs
- SizeChangedEventArgs.cs
- ThreadStaticAttribute.cs