Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / 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); } } } }
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Transactions.cs
- SortDescriptionCollection.cs
- ThreadAbortException.cs
- _TLSstream.cs
- CaseCqlBlock.cs
- TdsParserHelperClasses.cs
- LicenseProviderAttribute.cs
- OrderedEnumerableRowCollection.cs
- DocumentScope.cs
- Decoder.cs
- TemplateBuilder.cs
- WmlPageAdapter.cs
- HttpRequest.cs
- TreeView.cs
- FormCollection.cs
- Ray3DHitTestResult.cs
- NamedPermissionSet.cs
- XmlSchemaImport.cs
- PeerEndPoint.cs
- CssStyleCollection.cs
- TransactionBridge.cs
- ParameterModifier.cs
- BitmapDownload.cs
- ObjectDataSourceMethodEventArgs.cs
- InvokePattern.cs
- FormatException.cs
- ObjectNavigationPropertyMapping.cs
- Aes.cs
- XmlElement.cs
- RoleGroupCollection.cs
- ByteAnimationUsingKeyFrames.cs
- ChtmlCalendarAdapter.cs
- MetadataImporter.cs
- CompatibleComparer.cs
- MailMessageEventArgs.cs
- DebugInfoExpression.cs
- EdmComplexTypeAttribute.cs
- ADMembershipProvider.cs
- WebAdminConfigurationHelper.cs
- InputScopeManager.cs
- ClientFormsIdentity.cs
- DataTemplateSelector.cs
- Win32Native.cs
- ImageSourceValueSerializer.cs
- AttributeAction.cs
- QuaternionAnimation.cs
- ScriptControl.cs
- DataGridViewRowPrePaintEventArgs.cs
- ObjectConverter.cs
- COM2ExtendedUITypeEditor.cs
- Normalization.cs
- ScopeElement.cs
- SessionStateUtil.cs
- XmlILConstructAnalyzer.cs
- QueryCursorEventArgs.cs
- IntersectQueryOperator.cs
- FormsAuthenticationUserCollection.cs
- PathStreamGeometryContext.cs
- GridViewSortEventArgs.cs
- ProxyWebPart.cs
- WebBrowserSiteBase.cs
- TypeSource.cs
- GlyphTypeface.cs
- SqlReorderer.cs
- ProxyHelper.cs
- Int32RectConverter.cs
- LookupNode.cs
- EdmProviderManifest.cs
- SqlNotificationRequest.cs
- Parallel.cs
- ToolbarAUtomationPeer.cs
- cookieexception.cs
- BooleanSwitch.cs
- ExceptionCollection.cs
- securitymgrsite.cs
- TextModifier.cs
- ISAPIApplicationHost.cs
- COM2AboutBoxPropertyDescriptor.cs
- LocalServiceSecuritySettingsElement.cs
- Thickness.cs
- CaretElement.cs
- GlyphsSerializer.cs
- TextRangeBase.cs
- ScrollViewer.cs
- HybridDictionary.cs
- QilSortKey.cs
- CriticalFinalizerObject.cs
- HtmlMobileTextWriter.cs
- StringValidatorAttribute.cs
- QueryReaderSettings.cs
- ReferenceSchema.cs
- EntitySet.cs
- NameTable.cs
- DataKeyArray.cs
- MatchAttribute.cs
- ProfileManager.cs
- ValidatorCollection.cs
- FileSystemEventArgs.cs
- UpdatableGenericsFeature.cs
- TextBoxRenderer.cs