Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / xsp / System / Web / Management / SimpleMailWebEventProvider.cs / 1 / 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; [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] 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; [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] 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
- PropertyFilter.cs
- TreeView.cs
- ApplyImportsAction.cs
- KeyEvent.cs
- WindowProviderWrapper.cs
- Reference.cs
- StatusBar.cs
- WebPartDisplayModeCollection.cs
- CodeCommentStatement.cs
- ConfigXmlElement.cs
- NamedObject.cs
- DynamicUpdateCommand.cs
- BStrWrapper.cs
- StringArrayConverter.cs
- DCSafeHandle.cs
- HtmlTable.cs
- Point3D.cs
- SqlTrackingQuery.cs
- PriorityBinding.cs
- Array.cs
- DataGridViewImageColumn.cs
- Add.cs
- MemberExpression.cs
- ContextStack.cs
- TableLayoutSettingsTypeConverter.cs
- ServiceDescription.cs
- ToolStripRendererSwitcher.cs
- TableAutomationPeer.cs
- Token.cs
- ExceptQueryOperator.cs
- TextTreeTextNode.cs
- TransactionScopeDesigner.cs
- FragmentNavigationEventArgs.cs
- KeyGestureConverter.cs
- OracleTimeSpan.cs
- AlignmentXValidation.cs
- XmlSortKeyAccumulator.cs
- BamlTreeNode.cs
- XmlHelper.cs
- ValidatorUtils.cs
- OracleCommandBuilder.cs
- SHA256.cs
- ContractListAdapter.cs
- GroupBox.cs
- ContentElementCollection.cs
- ValidationErrorCollection.cs
- PropertyChangeTracker.cs
- ScriptingSectionGroup.cs
- ReaderWriterLockWrapper.cs
- ListViewDataItem.cs
- DataColumnMappingCollection.cs
- PlanCompilerUtil.cs
- PropertyGridCommands.cs
- ConsumerConnectionPoint.cs
- UIElementHelper.cs
- HealthMonitoringSection.cs
- DictionaryMarkupSerializer.cs
- XmlTextEncoder.cs
- ErrorWebPart.cs
- SemanticAnalyzer.cs
- EventSinkHelperWriter.cs
- SequentialWorkflowRootDesigner.cs
- TimeSpanFormat.cs
- LeftCellWrapper.cs
- PreProcessor.cs
- RequestCacheManager.cs
- RelatedPropertyManager.cs
- TreeIterator.cs
- IList.cs
- KoreanCalendar.cs
- AsyncSerializedWorker.cs
- Effect.cs
- ActivityExecutionContextCollection.cs
- Win32SafeHandles.cs
- UserControl.cs
- HttpDictionary.cs
- OleDbParameter.cs
- MediaPlayerState.cs
- CodeGenerator.cs
- StackSpiller.cs
- FrameworkPropertyMetadata.cs
- NegotiateStream.cs
- ManipulationDelta.cs
- DetailsViewUpdateEventArgs.cs
- MainMenu.cs
- StructureChangedEventArgs.cs
- DataTemplateKey.cs
- BasicExpressionVisitor.cs
- VoiceInfo.cs
- PropertyToken.cs
- SchemaElementLookUpTable.cs
- SmtpAuthenticationManager.cs
- ButtonBaseAutomationPeer.cs
- ToolStripOverflow.cs
- FieldTemplateUserControl.cs
- HighlightComponent.cs
- WebEventTraceProvider.cs
- UrlAuthorizationModule.cs
- DbConnectionPoolIdentity.cs
- ListViewTableRow.cs