Code:
/ DotNET / DotNET / 8.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
- PowerStatus.cs
- TextDecorationUnitValidation.cs
- dtdvalidator.cs
- NavigationProgressEventArgs.cs
- HighlightVisual.cs
- MachineKeyConverter.cs
- ServicePoint.cs
- XmlAttributeCollection.cs
- DomainLiteralReader.cs
- InplaceBitmapMetadataWriter.cs
- autovalidator.cs
- Form.cs
- XmlSignificantWhitespace.cs
- ScaleTransform.cs
- SQLResource.cs
- FormsAuthentication.cs
- XmlSchemaSimpleTypeRestriction.cs
- MetadataFile.cs
- SiteMapDataSourceView.cs
- CodeTypeDelegate.cs
- ThreadAbortException.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- SoapAttributeOverrides.cs
- EventProviderTraceListener.cs
- CellLabel.cs
- DateTimeUtil.cs
- XmlCharacterData.cs
- Simplifier.cs
- X509Utils.cs
- MouseGestureValueSerializer.cs
- ModelItemImpl.cs
- WebControl.cs
- CodeRegionDirective.cs
- ServiceOperationListItem.cs
- AssociatedControlConverter.cs
- ImageSourceValueSerializer.cs
- UrlMappingsSection.cs
- Line.cs
- RelationshipEnd.cs
- MetadataArtifactLoader.cs
- SQLBinaryStorage.cs
- UserControl.cs
- COM2Enum.cs
- FirstMatchCodeGroup.cs
- MethodCallExpression.cs
- StringBuilder.cs
- BaseUriHelper.cs
- MsmqBindingElementBase.cs
- XsdDataContractExporter.cs
- ComponentChangingEvent.cs
- FindCriteriaElement.cs
- BamlWriter.cs
- DataServiceExpressionVisitor.cs
- MruCache.cs
- CommandField.cs
- Material.cs
- CloudCollection.cs
- _AutoWebProxyScriptWrapper.cs
- MaskInputRejectedEventArgs.cs
- DataGridState.cs
- OleServicesContext.cs
- MessageTransmitTraceRecord.cs
- DbSourceParameterCollection.cs
- UniqueIdentifierService.cs
- ProxyGenerator.cs
- DataTableMappingCollection.cs
- DictionaryEntry.cs
- FontFamilyIdentifier.cs
- XslTransform.cs
- MimeFormReflector.cs
- ConfigXmlWhitespace.cs
- SerializationAttributes.cs
- CompositeDuplexBindingElementImporter.cs
- AttributeCollection.cs
- XhtmlConformanceSection.cs
- TrustLevelCollection.cs
- ScrollItemProviderWrapper.cs
- PartialCachingAttribute.cs
- BindingCollection.cs
- PoisonMessageException.cs
- ConnectionPoint.cs
- UnsafeNetInfoNativeMethods.cs
- LongMinMaxAggregationOperator.cs
- InheritanceContextHelper.cs
- followingquery.cs
- TranslateTransform3D.cs
- CodeDOMUtility.cs
- IBuiltInEvidence.cs
- SqlCommandBuilder.cs
- Enumerable.cs
- ActiveXContainer.cs
- MatchNoneMessageFilter.cs
- ListSortDescription.cs
- ChtmlTextWriter.cs
- DocumentPageTextView.cs
- BCLDebug.cs
- _AcceptOverlappedAsyncResult.cs
- AuthenticodeSignatureInformation.cs
- GroupBoxRenderer.cs
- RuntimeConfig.cs