Each of these modes is defined here: ❑ System.Web.SessionState.InProcSessionStateStore:Provides you with the capability to store sessions in the same process as the ASP.NET worker proces
Trang 1This single class for the personalization system inherits from theProfileProviderbase class This is
illustrated in Figure 12-11
Figure 12-11
As with the other providers covered so far,SqlProfileProviderconnects to a Microsoft SQL Server
Express Edition file by default Although this is the default, you can change the connection to work
with either SQL Server 7.0, 2000, 2005, or 2008 For instance, if you are connecting to a SQL Server 2005 database, you define your connection in theweb.configand then associate yourSqlProfileProvider
declaration to this connection string This scenario is presented in Listing 12-12
Listing 12-12: Connecting the SqlProfileProvider to SQL Server 2005
<configuration>
<connectionStrings>
<add name="LocalSql2005Server"
connectionString="Data Source=127.0.0.1;Integrated Security=SSPI" />
</connectionStrings>
<system.web>
<profile>
<providers>
<clear />
<add name="AspNetSql2005ProfileProvider"
connectionStringName="LocalSql2005Server" applicationName="/"
type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
Continued
Trang 2<add name="FirstName" />
<add name="LastName" />
<add name="LastVisited" />
<add name="Age" />
<add name="Member" />
</properties>
</profile>
</system.web>
</configuration>
Remember that to store profile information in your SQL Server database, you have to configure this
database so the proper tables, stored procedures, and other items are created This task was discussed
earlier in the chapter
The SiteMap Provider
Similar to the personalization provider just discussed, ASP.NET 3.5 provides a single provider to work
with sitemaps Sitemaps are what ASP.NET uses to provide you with a centralized way of maintaining
site navigation By default, the definition of a Web application’s navigation is located in a structured
XML file The sitemap provider lets you interact with this XML file, the.sitemapfile, which you create
for your application The provider available for sitemaps isSystem.Web.XmlSiteMapProvider, which
provides you with the capability to use the ASP.NET navigation system to connect to an XML-based file
This single class for the sitemap system inherits from theStaticSiteMapProviderbase class, which is a
partial implementation of theSiteMapProviderbase class This is illustrated in Figure 12-12
This is the first provider introduced so far that does not connect to a SQL Server database by default
Instead, this provider is designed to work with a static XML file This XML file uses a particular schema
and is covered in considerable detail in Chapter 14
The code required to configureXmlSiteMapProvideris presented in Listing 12-13
Listing 12-13: Defining an XmlSiteMapProvider instance in the web.config
<configuration>
<system.web>
<siteMap defaultProvider="MyXmlSiteMapProvider" enabled="true">
<providers>
<add name="MyXmlSiteMapProvider"
description="SiteMap provider that reads in sitemap files."
type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
siteMapFile="AnotherWeb.sitemap" />
</providers>
</siteMap>
</system.web>
</configuration>
Trang 3Figure 12-12
TheXmlSiteMapProviderallows only a single root element in the strictly designedweb.sitemap
file The default file name of the XML file it is looking for isweb.sitemap, although you can change this default setting (as you can see in Listing 12-13) by using thesiteMapFileattribute within the provider
declaration in theweb.configfile
SessionState Providers
As mentioned in the beginning of the chapter, an original concept of a provider model existed when the
idea of managing session state in different ways was first introduced with ASP.NET 1.x The available
modes of storing session state for your users includeInProc,StateServer,SQLServer, or evenCustom
Trang 4Each mode has definite pros and cons associated with it, and you should examine each option thoroughly
when deciding which session state mode to use
You can find more information on these session state modes in Chapter 22.
This provider model is a bit different from the others discussed so far in this chapter The
SessionState-Moduleclass is a handler provided to load one of the available session state modes Each of these modes
is defined here:
❑ System.Web.SessionState.InProcSessionStateStore:Provides you with the capability to
store sessions in the same process as the ASP.NET worker process This is by far the
best-performing method of session state management
❑ System.Web.SessionState.OutOfProcSessionStateStore:Provides you with the capability to
store sessions in a process separate from the ASP.NET worker process This mode is a little more
secure, but a little worse in performance than the InProc mode
❑ System.Web.SessionState.SqlSessionStateStore:Provides you with the capability to store
sessions in SQL Server This is by far the most secure method of storing sessions, but it is the
worst performing mode of the three available methods
These three modes for session state management are illustrated in Figure 12-13
Figure 12-13
Next, this chapter reviews each of the three modes that you can use out of the box in your ASP.NET 3.5
applications
Trang 5TheInProcSessionStateStoremode is the default mode for ASP.NET 1.x as well as for ASP.NET 2.0
and 3.5 In this mode, the sessions generated are held in the same process as that being used by the
ASP.NET worker process (aspnet_wp.exeorw3wp.exe) This mode is the best performing, but some
problems exist with this mode as well Because the sessions are stored in the same process, whenever
the worker process is recycled, all the sessions are destroyed Worker processes can be recycled for many reasons (such as a change to theweb.configfile, theGlobal.asaxfile, or a setting in IIS that requires the process to be recycled after a set time period)
An example of the configuration in theweb.configfile for working in the InProc mode is presented in
Listing 12-14
Listing 12-14: Defining the InProc mode for session state management in the
web.config
<configuration>
<system.web>
<sessionState mode="InProc">
</sessionState>
</system.web>
</configuration>
As you can see, this mode is rather simple The next method reviewed is the out-of-process mode — also referred to as the StateServer mode
System.Web.SessionState.OutOfProcSessionStateStore
In addition to the InProc mode, the StateServer mode is an out-of-process method of storing session
state This method does not perform as well as one that stores the sessions in the same process as the
ASP.NET worker process This makes sense because the method must jump process boundaries to work with the sessions you are employing Although the performance is poorer than in the InProc mode, the OutOfProcSessionStateStoremethod is more reliable than running the sessions using InProcSession-StateStore If your application’s worker process recycles, the sessions that this application is working
with are still maintained This is a vital capability for those applications that are critically dependent
upon sessions
An example of usingOutOfProcSessionStateStoreis detailed in Listing 12-15
Listing 12-15: Running sessions out of process using OutOfProcSessionStateStore
<configuration>
<system.web>
<sessionState mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424">
</sessionState>
</system.web>
</configuration>
Trang 6When using the StateServer mode, you also must define where the sessions are stored using the
stateConnectionStringattribute In this case, the local server is used, meaning that the sessions are
stored on the same machine, but in an entirely separate process You could have just as easily stored the
sessions on a different server by providing the appropriate IP address as a value for this attribute In
addition to the IP address, note that port 42424 is used This port is required when using the StateServer
mode for sessions Changing the port for the StateServer is detailed in Chapter 22
System.Web.SessionState.SqlSessionStateStore
The final provider for session state management available to you in ASP.NET is the
SqlSessionState-Store This method is definitely the most resilient of the three available modes With that said, however,
it is also the worst performing of the three modes It is important that you set up your database
appro-priately if you use this method of session state storage Again, Chapter 22 shows you how to set up your
database
To configure your application to work withSqlSessionStateStore, you must configure theweb.config
as detailed in Listing 12-16
Listing 12-16: Defining SqlSessionStateStore in the web.config file
<configuration>
<system.web>
<sessionState mode="SQLServer"
allowCustomSqlDatabase="true"
sqlConnectionString="Data Source=127.0.0.1;
database=MyCustomASPStateDatabase;Integrated Security=SSPI">
</sessionState>
</system.web>
</configuration>
Next, you review the providers available for the Web events architecture
Web Event Providers
Among all the available systems provided in ASP.NET 3.5, more providers are available for the health
monitoring system than for any other system The new health monitoring system enables ASP.NET
application administrators to evaluate the health of a running ASP.NET application and to capture events
(errors and other possible triggers) that can then be stored via one of the available providers These events
are referred to as Web events A large list of events can be monitored via the health monitoring system,
and this means that you can start recording items such as authentication failures/successes, all errors
generated, ASP.NET worker process information, request data, response data, and more Recording
items means using one of the providers available to record to a data store of some kind
Health monitoring in ASP.NET 3.5 is covered in Chapter 33.
Trang 7By default, ASP.NET 3.5 offers seven possible providers for the health monitoring system This is more than for any of the other ASP.NET systems These providers are defined in the following list:
❑ System.Web.Management.EventLogWebEventProvider:Provides you with the capability to use
the ASP.NET health monitoring system to record security operation errors and all other errors
into the Windows event log
❑ System.Web.Management.SimpleMailWebEventProvider:Provides you with the capability to
use the ASP.NET health monitoring system to send error information in an e-mail
❑ System.Web.Management.TemplatedMailWebEventProvider:Similar to the
SimpleMailWeb-EventProvider, theTemplatedMailWebEventProviderclass provides you with the capability
to send error information in a templated e-mail Templates are defined using a standard.aspx
page
❑ System.Web.Management.SqlWebEventProvider:Provides you with the capability to use the
ASP.NET health monitoring system to store error information in SQL Server As with the other
SQL providers for the other systems in ASP.NET, theSqlWebEventProviderstores error
infor-mation in SQL Server Express Edition by default
❑ System.Web.Management.TraceWebEventProvider:Provides you with the capability to use the ASP.NET health monitoring system to send error information to the ASP.NET page tracing sys-tem
❑ System.Web.Management.IisTraceWebEventProvider:Provides you with the capability to use
the ASP.NET health monitoring system to send error information to the IIS tracing system
❑ System.Web.Management.WmiWebEventProvider:Provides you with the capability to connect
the new ASP.NET health monitoring system, the Windows Management Instrumentation (WMI) event provider
These seven providers for the ASP.NET health monitoring system inherit from either the
WebEvent-Providerbase class, or theBufferedWebEventProvider(which, in turn, inherits from
WebEventProvid-er) This is illustrated in Figure 12-14
What is the difference between theWebEventProviderclass and theBufferedWebEventProvider? The
big difference is that theWebEventProviderwrites events as they happen, whereas the
BufferedWeb-EventProviderholds Web events until a collection of them is made The collection is then written to the database or sent in an e-mail in a batch If you use theSqlWebEventProviderclass, you actually want this batch processing to occur rather than having the provider make a connection to the database and write
to it for each Web event that occurs
Next, this chapter looks at each of the seven available providers for the health monitoring system
System.Web.Management.EventLogWebEventProvider
Traditionally, administrators and developers are used to reviewing system and application errors in the built-in Windows event log The items in the event log can be viewed via the Event Viewer This
Trang 8Figure 12-14
GUI-based tool for viewing events can be found by selecting Administration Tools in the Control Panel
and then selecting Event Viewer
By default, the health monitoring system uses the Windows event log to record the items that are already
specified in the server’s configuration files or items you have specified in theweb.configfile of your
application If you look in theweb.config.commentsfile in the CONFIG folder of the Microsoft NET
Framework install on your server, you see that theEventLogWebEventProvideris detailed in this
loca-tion The code is presented in Listing 12-17
Listing 12-17: The EventLogWebEventProvider declared in the web.config.comments
file
<configuration>
<system.web>
<healthMonitoring heartbeatInterval="0" enabled="true">
<bufferModes>
<! Removed for clarity >
</bufferModes>
<providers>
<clear />
<add name="EventLogProvider"
Trang 9type="System.Web.Management.EventLogWebEventProvider, System.Web,Version=2.0.0.0,Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
<! Removed for clarity >
</providers>
<profiles>
<! Removed for clarity >
</profiles>
<rules>
<add name="All Errors Default" eventName="All Errors"
provider="EventLogProvider" profile="Default" minInstances="1"
maxLimit="Infinite" minInterval="00:01:00" custom="" />
<add name="Failure Audits Default" eventName="Failure Audits"
provider="EventLogProvider" profile="Default" minInstances="1"
maxLimit="Infinite" minInterval="00:01:00" custom="" />
</rules>
<eventMappings>
<! Removed for clarity >
</eventMappings>
</healthMonitoring>
</system.web>
</configuration>
As you can see from Listing 12-17, a lot of possible settings can be applied in the health monitoring
system Depending on the rules and event mappings you have defined, these items are logged into the
event log of the server that is hosting the application Looking closely at the<rules>section of the
listing, you can see that specific error types are assigned to be monitored In this section, two types of
errors are trapped in the health monitoring system —All Errors DefaultandFailure Audits Default When one of the errors defined in the<rules>section is triggered and captured by the health monitoring system, it is recorded Where it is recorded depends upon the specified provider The provider attribute used in the<add>element of the<rules>section determines this In both cases in the example in Listing 12-17, you can see that theEventLogProvideris the assigned provider This means that the Windows
error log is used for recording the errors of both types
As you work through the rest of the providers, note that the health monitoring system behaves differently
when working with providers than the other systems that have been introduced in this chapter Using
the new health monitoring system in ASP.NET 3.5, you are able to assign more than one provider at a
time This means that you are able to specify in theweb.configfile that errors are logged not only into
the Windows event log, but also into any other data store using any other provider you designate Even
for the same Web event type, you can assign the Web event to be recorded to the Windows event log and
SQL Server at the same time (for example).
System.Web.Management.SimpleMailWebEventProvider
Sometimes when errors occur in your applications, you as an administrator or a concerned developer
want e-mail notification of the problem In addition to recording events to disk using something such
as theEventLogWebEventProvider, you can also have the error notification e-mailed to you using the
SimpleMailWebEventProvider As it states in the provider name, the e-mail is a simply constructed one Listing 12-18 shows you how you would go about adding e-mail notification in addition to writing the
errors to the Windows event log
Trang 10Listing 12-18: The SimpleMailWebEventProvider definition
<configuration>
<system.web>
<healthMonitoring heartbeatInterval="0" enabled="true">
<bufferModes>
<add name="Website Error Notification"
maxBufferSize="100"
maxFlushSize="20"
urgentFlushThreshold="1"
regularFlushInterval="Infinite"
urgentFlushInterval="00:01:00"
maxBufferThreads="1" />
</bufferModes>
<providers>
<clear />
<add name="EventLogProvider"
type="System.Web.Management.EventLogWebEventProvider, System.Web,Version=2.0.0.0,Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
<add name="SimpleMailProvider"
type="System.Web.Management.SimpleMailWebEventProvider, System.Web, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
from="website@company.com"
to="admin@company.com"
cc="adminLevel2@company.com bcc="director@company.com"
bodyHeader="Warning!"
bodyFooter="Please investigate ASAP."
subjectPrefix="Action required."
buffer="true"
bufferMode="Website Error Notification"
maxEventLength="4096"
maxMessagesPerNotification="1" />
</providers>
<profiles>
<! Removed for clarity >
</profiles>
<rules>
<add name="All Errors Default" eventName="All Errors"
provider="EventLogProvider" profile="Default" minInstances="1"
maxLimit="Infinite" minInterval="00:01:00" custom="" />
<add name="Failure Audits Default" eventName="Failure Audits"
provider="EventLogProvider" profile="Default" minInstances="1"
maxLimit="Infinite" minInterval="00:01:00" custom="" />
<add name="All Errors Simple Mail" eventName="All Errors"
provider="SimpleMailProvider" profile="Default" />
<add name="Failure Audits Default" eventName="Failure Audits"
provider="SimpleMailProvider" profile="Default" />
</rules>
<eventMappings>