Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// 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);
}
}
}
}
// 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
- ByteFacetDescriptionElement.cs
- ObjectTag.cs
- FlagsAttribute.cs
- WmlValidationSummaryAdapter.cs
- VoiceSynthesis.cs
- PieceDirectory.cs
- RegistrationServices.cs
- RtType.cs
- XhtmlBasicControlAdapter.cs
- Attributes.cs
- Application.cs
- AdRotator.cs
- DesignParameter.cs
- MILUtilities.cs
- ConfigXmlAttribute.cs
- VerticalAlignConverter.cs
- EditorAttribute.cs
- ToolboxComponentsCreatedEventArgs.cs
- HtmlHead.cs
- XmlAttributeOverrides.cs
- EntityDataSource.cs
- XsltArgumentList.cs
- BorderGapMaskConverter.cs
- SamlEvidence.cs
- ExpressionParser.cs
- DataGridState.cs
- DateTimeOffsetAdapter.cs
- RuleAction.cs
- FixedPageStructure.cs
- BitmapSource.cs
- TextSpanModifier.cs
- KoreanLunisolarCalendar.cs
- DataBoundControlHelper.cs
- RectConverter.cs
- StoryFragments.cs
- TypeListConverter.cs
- UserValidatedEventArgs.cs
- ViewStateException.cs
- XmlTextWriter.cs
- DragDropManager.cs
- TextTreeTextBlock.cs
- WriteableOnDemandPackagePart.cs
- BlockUIContainer.cs
- Atom10FormatterFactory.cs
- bidPrivateBase.cs
- SpnegoTokenAuthenticator.cs
- HtmlImage.cs
- SqlHelper.cs
- UrlMappingCollection.cs
- NullableDecimalSumAggregationOperator.cs
- DataContractSerializerSection.cs
- DesignerSerializerAttribute.cs
- WindowPatternIdentifiers.cs
- dtdvalidator.cs
- PageParserFilter.cs
- RequestCacheEntry.cs
- DrawingAttributesDefaultValueFactory.cs
- TypeContext.cs
- OperationGenerator.cs
- DashStyle.cs
- ToolboxSnapDragDropEventArgs.cs
- DataGridViewTopRowAccessibleObject.cs
- RIPEMD160Managed.cs
- AutomationElementCollection.cs
- BCLDebug.cs
- baseaxisquery.cs
- MemberRelationshipService.cs
- TokenBasedSetEnumerator.cs
- ProfileSettingsCollection.cs
- FeedUtils.cs
- LoginUtil.cs
- LinkLabelLinkClickedEvent.cs
- Single.cs
- safex509handles.cs
- ContentControl.cs
- CompositeDuplexBindingElement.cs
- HtmlElementCollection.cs
- Ppl.cs
- CommonGetThemePartSize.cs
- OutOfMemoryException.cs
- ListBase.cs
- XmlLanguage.cs
- EventLogTraceListener.cs
- Base64Stream.cs
- XmlSchemaExporter.cs
- BmpBitmapEncoder.cs
- ConfigurationPropertyAttribute.cs
- ParameterDataSourceExpression.cs
- DCSafeHandle.cs
- XmlSchemaSimpleTypeList.cs
- WebPartVerbsEventArgs.cs
- TableNameAttribute.cs
- COM2ComponentEditor.cs
- ByteConverter.cs
- SourceInterpreter.cs
- Attributes.cs
- KoreanLunisolarCalendar.cs
- PropertyMapper.cs
- QueryOutputWriter.cs
- BinaryFormatter.cs