Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- OptimalBreakSession.cs
- PropertyChangedEventManager.cs
- ControlOperationBehavior.cs
- XmlKeywords.cs
- ServiceNameElement.cs
- DataGridItemCollection.cs
- ObjectDataSourceView.cs
- SQlBooleanStorage.cs
- StructuredType.cs
- CqlErrorHelper.cs
- PromptEventArgs.cs
- AutoGeneratedField.cs
- RelAssertionDirectKeyIdentifierClause.cs
- CardSpacePolicyElement.cs
- MouseButtonEventArgs.cs
- CompositeFontInfo.cs
- Geometry.cs
- dtdvalidator.cs
- ParserHooks.cs
- XmlNotation.cs
- TableLayoutCellPaintEventArgs.cs
- ObfuscateAssemblyAttribute.cs
- BaseAddressPrefixFilterElementCollection.cs
- DataRow.cs
- WebAdminConfigurationHelper.cs
- SmiRecordBuffer.cs
- ResourceLoader.cs
- KeyedByTypeCollection.cs
- SimpleLine.cs
- XamlVector3DCollectionSerializer.cs
- X500Name.cs
- RtfControls.cs
- TemplateControlCodeDomTreeGenerator.cs
- SqlCacheDependency.cs
- SafeSecurityHandles.cs
- UrlAuthorizationModule.cs
- TextCollapsingProperties.cs
- SystemWebSectionGroup.cs
- AndCondition.cs
- GridLengthConverter.cs
- ImageBrush.cs
- RequestNavigateEventArgs.cs
- WizardPanelChangingEventArgs.cs
- QueryCreatedEventArgs.cs
- TextTreeDeleteContentUndoUnit.cs
- TemplateKeyConverter.cs
- BooleanAnimationUsingKeyFrames.cs
- EncryptedReference.cs
- NumericUpDown.cs
- RemotingException.cs
- CancelEventArgs.cs
- RoleManagerModule.cs
- IApplicationTrustManager.cs
- SelectionItemPattern.cs
- TriggerCollection.cs
- XmlMembersMapping.cs
- BrowserCapabilitiesFactory35.cs
- DbInsertCommandTree.cs
- FontWeights.cs
- iisPickupDirectory.cs
- TempFiles.cs
- ButtonBase.cs
- Attachment.cs
- SelectionRange.cs
- BinarySerializer.cs
- PriorityQueue.cs
- MethodCallTranslator.cs
- SelectionPattern.cs
- SessionPageStatePersister.cs
- Encoder.cs
- CommandManager.cs
- DocumentPageView.cs
- Decoder.cs
- Configuration.cs
- followingsibling.cs
- webclient.cs
- WorkingDirectoryEditor.cs
- Win32.cs
- DrawingVisual.cs
- WindowsFormsLinkLabel.cs
- WorkflowInlining.cs
- XmlEnumAttribute.cs
- Error.cs
- ThreadAbortException.cs
- RegexMatch.cs
- FileDialog_Vista_Interop.cs
- XmlTextWriter.cs
- RuleProcessor.cs
- CheckPair.cs
- ConnectionInterfaceCollection.cs
- FrameworkElementAutomationPeer.cs
- HighlightVisual.cs
- MimeTypePropertyAttribute.cs
- ControlCollection.cs
- ItemType.cs
- ActivitySurrogateSelector.cs
- ToolStripContainerDesigner.cs
- FontFamilyValueSerializer.cs
- WebAdminConfigurationHelper.cs
- MessagePropertyFilter.cs