Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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 ( 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 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SQLInt64.cs
- DataServices.cs
- XmlReflectionImporter.cs
- ModifierKeysConverter.cs
- Tool.cs
- FunctionImportElement.cs
- MasterPageCodeDomTreeGenerator.cs
- HtmlCommandAdapter.cs
- SelectionChangedEventArgs.cs
- ToolStripContentPanelRenderEventArgs.cs
- PrintingPermissionAttribute.cs
- IdentityManager.cs
- ProfileGroupSettings.cs
- DataTableReader.cs
- LongMinMaxAggregationOperator.cs
- ConnectionStringsExpressionBuilder.cs
- OutputCacheSettings.cs
- MessageDescriptionCollection.cs
- EraserBehavior.cs
- PaginationProgressEventArgs.cs
- ValidatorCompatibilityHelper.cs
- EncryptionUtility.cs
- NativeMethods.cs
- StreamUpdate.cs
- ControlPropertyNameConverter.cs
- DtdParser.cs
- DecimalKeyFrameCollection.cs
- PropertyCondition.cs
- TextParagraphCache.cs
- HttpModulesSection.cs
- ReferenceAssemblyAttribute.cs
- Vector.cs
- ManualResetEvent.cs
- GridSplitterAutomationPeer.cs
- PropertyInfo.cs
- odbcmetadatacolumnnames.cs
- ISAPIRuntime.cs
- Transform3D.cs
- Propagator.JoinPropagator.cs
- QueryReaderSettings.cs
- DefaultExpressionVisitor.cs
- ItemsControlAutomationPeer.cs
- QueryConverter.cs
- StylusButton.cs
- PatternMatcher.cs
- IDQuery.cs
- DataSourceView.cs
- DrawingState.cs
- ImageMapEventArgs.cs
- LinkTarget.cs
- AppSettingsReader.cs
- TextBox.cs
- Tokenizer.cs
- ContextMenuAutomationPeer.cs
- StreamingContext.cs
- SmiSettersStream.cs
- Int64Animation.cs
- COM2IDispatchConverter.cs
- SchemaLookupTable.cs
- XPathAncestorQuery.cs
- TableLayoutStyleCollection.cs
- WriterOutput.cs
- RoutedEventConverter.cs
- JournalEntryStack.cs
- PropertyMapper.cs
- Triangle.cs
- InheritanceContextHelper.cs
- TextTreeTextNode.cs
- NullToBooleanConverter.cs
- OptimizedTemplateContentHelper.cs
- ArraySet.cs
- BypassElement.cs
- HttpFileCollectionWrapper.cs
- CultureInfo.cs
- WindowsContainer.cs
- CapiSafeHandles.cs
- CursorConverter.cs
- ObjectItemLoadingSessionData.cs
- SqlParameterCollection.cs
- HttpModule.cs
- PartitionResolver.cs
- Instrumentation.cs
- IPEndPoint.cs
- ProtocolsSection.cs
- SystemUdpStatistics.cs
- RSACryptoServiceProvider.cs
- AggregationMinMaxHelpers.cs
- MetafileHeaderWmf.cs
- _FtpControlStream.cs
- WeakEventManager.cs
- GeometryConverter.cs
- WhitespaceRuleLookup.cs
- XmlSchemaSimpleTypeList.cs
- XmlExpressionDumper.cs
- QuadraticEase.cs
- SqlMultiplexer.cs
- DataGridViewAccessibleObject.cs
- CalendarTable.cs
- VisualCollection.cs
- RegionData.cs