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
- WeakEventManager.cs
- TabControl.cs
- KnownTypesProvider.cs
- GatewayDefinition.cs
- AndAlso.cs
- MetadataPropertyAttribute.cs
- XmlSchemaChoice.cs
- PointLightBase.cs
- DocumentGridPage.cs
- XMLSchema.cs
- FrameSecurityDescriptor.cs
- X509Certificate2Collection.cs
- SemanticBasicElement.cs
- StandardCommands.cs
- ILGen.cs
- BooleanKeyFrameCollection.cs
- DbDataReader.cs
- RegistrySecurity.cs
- ProfileInfo.cs
- LinkedList.cs
- Select.cs
- BmpBitmapDecoder.cs
- GradientStopCollection.cs
- DES.cs
- SmtpReplyReader.cs
- LayoutInformation.cs
- SafeFileMappingHandle.cs
- SEHException.cs
- DataBoundControl.cs
- WebDescriptionAttribute.cs
- SessionSwitchEventArgs.cs
- ExpressionVisitor.cs
- BindingCollection.cs
- NavigationEventArgs.cs
- SearchExpression.cs
- Win32NamedPipes.cs
- BaseAppDomainProtocolHandler.cs
- MetadataItemSerializer.cs
- DataFormats.cs
- WebResponse.cs
- CodeSnippetCompileUnit.cs
- SchemaMapping.cs
- StringCollection.cs
- AcceptorSessionSymmetricMessageSecurityProtocol.cs
- EntityExpressionVisitor.cs
- HtmlMeta.cs
- DrawingGroup.cs
- CheckPair.cs
- RecordsAffectedEventArgs.cs
- TripleDES.cs
- PageThemeParser.cs
- ProcessModule.cs
- OneOf.cs
- TypeInitializationException.cs
- TypeContext.cs
- QuinticEase.cs
- DesignerVerbCollection.cs
- DataGridHeaderBorder.cs
- StateMachineTimers.cs
- ServiceNameCollection.cs
- SqlDataRecord.cs
- TriggerActionCollection.cs
- Int64.cs
- CounterSampleCalculator.cs
- Menu.cs
- AppDomain.cs
- WmpBitmapDecoder.cs
- CustomAttribute.cs
- ReadOnlyCollectionBuilder.cs
- ConnectionPoolRegistry.cs
- UIPermission.cs
- WindowShowOrOpenTracker.cs
- MailMessage.cs
- OpenTypeCommon.cs
- SchemaType.cs
- JsonEncodingStreamWrapper.cs
- FileRecordSequenceCompletedAsyncResult.cs
- ControlBuilder.cs
- RadialGradientBrush.cs
- FlowDocument.cs
- DbProviderFactory.cs
- GeometryHitTestResult.cs
- LocalizabilityAttribute.cs
- SimpleLine.cs
- RefType.cs
- MonthCalendar.cs
- HashStream.cs
- _DynamicWinsockMethods.cs
- XmlSchemaGroupRef.cs
- DataGridViewCellPaintingEventArgs.cs
- BitmapCache.cs
- LocalBuilder.cs
- MutexSecurity.cs
- XmlSerializerFactory.cs
- XmlILAnnotation.cs
- WebPartDisplayModeCollection.cs
- CommonObjectSecurity.cs
- UiaCoreApi.cs
- ReadOnlyDataSource.cs
- CompiledRegexRunner.cs