Download CIS 690 Project Report

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Microsoft SQL Server wikipedia , lookup

Relational model wikipedia , lookup

Database wikipedia , lookup

Microsoft Jet Database Engine wikipedia , lookup

Oracle Database wikipedia , lookup

Clusterpoint wikipedia , lookup

Open Database Connectivity wikipedia , lookup

Functional Database Model wikipedia , lookup

Database model wikipedia , lookup

Transcript
CIS 690 IMPLEMENTATION PROJECT
Content Management Systems using Custom Providers in ASP.NET 2.0
Under Guidance of Dr.Daniel A. Andresen
Prashanth Palakollu
Graduate Student (M.S.)
[email protected]
Abstract
The aim of this paper is to discuss the implementation of
the Custom Providers for Membership, Roles,
WebParts, Profiles, Sitemap and Page features in
ASP.NET 2.0 for Oracle Data source. It also focuses on
the implementation of a Content Management Systems
Portal using the built Custom Providers and other new
features of ASP.NET 2.0 like Httphandlers, Httpmodules
and Caching. The Performance results of this Portal
under different load characteristics and the other new
features of the newer version of ASP.NET are also
discussed in detail.
modify the user interface and only the providers for
different services need to be changed to suit the
appropriate Data source, as shown in Figure 1.
A provider is a module or a contract that provides a
uniform interface between the service and the data
source. Providers abstract the physical storage media in
a way similar to the device drivers for the hardware
devices [1].
Figure 1: The Provider Model
1. Introduction
1.1 Objective
The main objective of this project is to implement
the Custom Providers for Oracle Data source using
ASP.NET 2.0 technology. ASP.NET 2.0 ships in with
the providers only for SQL Server, which are used by
different services. This project aims to rewrite the
providers for Oracle Data source and also understand
and implement the new features available in ASP.NET
2.0, which are not available in ASP.NET 1.x.
1.2 Target Audience
This project will help the K-State Research and
Extension and Plant Diagnostic and Information Systems
to use all the new features of ASP.NET 2.0 and help in
the conversion of the existing ASP.NET 1.x portals to
ASP.NET 2.0.
2. Motivation
ASP.NET 2.0 includes a number of services like
Membership, Roles, Profile, Personalisation and other
services that store data in SQL Server database through
the built in providers. In order to completely use the
features of the newer version of ASP.NET, the providers
for the services need to be written for Oracle Database.
ASP.NET 1.x developers had to rewrite large portions of
the user interface and the component files in order to
change the Data source. But in ASP.NET 2.0, the
services do not interact with the database directly, but
use providers for interacting with the database. Hence
whenever the Data source changes, it is not necessary to
All the services in ASP.NET 2.0 are provider based and
hence any change in the database, involves only
changing the Providers from one data source to another
data source. The user interface and the services need not
be changed and only the appropriate provider needs to
be changed. Because of the flexibility of ASP.NET 2.0,
we can have each provider connecting to a different data
source and a single application can make use of these
providers, when data is stored in different databases.
I also implemented the Custom Providers and the
Custom Services like the Page Service which is not
available in ASP.NET 2.0 and also used the Page
Provider for connecting the Page Service with the Oracle
Database. The implemented Content Management
Systems Portal makes use of all these Providers using
ASP.NET 2.0.
1
Also, ASP.NET 2.0 has a lot of new features like
Caching, Httphandlers and Httpmodules which are far
more efficient and are easier to implement than in
ASP.NET 1.x. I used Httphandlers and Httpmodules for
UrlRewriting and for implementing friendly names for
the different pages of the Portal. I also implemented the
Site Map provider using the database notifications
feature of ODP.NET (Oracle Data Provider), which is
efficient and faster than the other data access methods
like ODBC and OLE DB, which are shown in figure 2.
Figure 2: The different Data access methods
follow an Html type of Declarative Programming, which
helps in building pages with far less code than with the
classic ASP, JSP or PHP. Also, ASP.NET 2.0 has much
more newer and advanced features than ASP.NET 1.x
like Master Pages, Themes, Skins, Profiles,
Membership, Role, Profile, Web Parts, Caching etc.
Web Parts help in building portal easily because of the
built in functionality of the User Controls.
3.2 Oracle 10g Release 1.
Oracle Database 10g Release 1 is the ideal database
designed for enterprise grid computing. It is the most
flexible and cost efficient way for managing large
enterprise information. It provides a cost effective means
for storing crucial data and also it has lot of quality and
performance enhancement features compared to the
existing versions of Oracle. Its other features include an
easy installation procedure, reduced configuration
features and management requirements, automatic
performance diagnosis and SQL tuning. These
automated management features help the DBA to
improve efficiency. [6]
3.3 Project Resources used
Resource
Server
Operating System
Processor
ODP.NET is far more efficient and also has a lot of
extra features which are not available in the other two
data access providers.
3. Resources Used
3.1 Technologies:
Microsoft Visual Studio 2005
Microsoft .Net Framework 2.0, Microsoft Visual C #.
Visual Studio 2005 is a complete set of development
tools for building ASP.NET 2.0 applications, XML Web
Services, desktop applications and mobile applications.
Visual Basic, Visual C++, Visual C# and Visual J# use
the same integrated development environment (IDE),
which is helpful in sharing tools and creation of mixed
language solutions.
The .NET Framework is a multi language environment
for building, deploying and running applications. It
consists of three main parts:-Common Language
Runtime, Unified Programming Classes and
ASP.NET.
ASP.NET 2.0 makes building web applications much
easier and interesting. ASP.NET 2.0 server controls
Backend Database
Editor
Framework
Performance Tools
Other tools
Resource Name
Personal Laptop
Windows XP Professional with
Service Pack 2
Pentium Centrino M CPU 1.73
GHZ, 512 MB RAM
Oracle 10g Release 10g 1
Microsoft Visual Studio 2005,
Macromedia Dream weaver
Microsoft .Net Framework 2.0
NUnit 2.2.8, ANTS 1.7,
Microsoft Application Test Center
Microsoft Visio 2003, MS Paint,
Microsoft Word 2003
4. Architecture
The whole Provider model architecture is shown in
Figure 3. ASP.NET applications use the services, which
in turn use the providers as a contract between itself and
the data source. The user interface does not use any
database commands and is entirely dependent on the
providers for database interaction. The built in providers
are loaded, when the application uses them for the first
time i.e. they undergo lazy initialization schema and
the built in providers like the page providers are loaded
when the application starts. Any kind of ASP.NET
application can make use of the provider model, with the
help of the built in and the custom providers. The
provider uses both the Microsoft data access and ODP to
connect to database for updating and querying.
2
Figure 3: Architecture
Workstation
Laptop
Workstations
Workstation
Services are built in, except the Page
Service, which in custom built to meet the
client requirements. The services need not
be changed, unlike the providers
Web Server Boundary
.aspx
.ascx
.ashx
html
ASP. NET 2.0 APPLICATIONS (.aspx, .ascx, .ashx, html)
ASP. NET 2.0 in Services
MEMBERSHIP
ROLES
WEB PARTS
PROFILES
PAGE SERVICE
SITEMAP
Providers
IIS Web
Server
Oracle Membership
Provider
Oracle Roles Provider
Oracle Personalization
Provider
Oracle Profiles Provider
Oracle Page Provider
Oracle Sitemap Provider
Providers are custom built
depending on the data source and
the needs of the client
Oracle 10G Database
Database
Server
Microsoft Data
Provider
Oracle Data Provider
3
Figure 4: Database Design
4
5. Database Design
6. Functionality of the Providers
The database design is shown in Figure 4. There are a
total of thirteen tables in the Provider model for the 6
providers.
The OracleMembershipProvider uses the 3 tables:
Provider_Applications, Provider_Membership, and
Provider_Users. The Provider model has been designed
in a way to accommodate multiple portals in a single
database. The Provider_Applications table is used for
storing the details of individual portal like the site id,
application name and description. Provider_Users acts
like a linking table to the rest of the provider model and
contains the fields, which are required by the other
providers. Provider_Membership contains the details of
the users of all the portals. Users of a particular portal
are distinguished depending the site id and the user id.
The OracleRoleProvider uses the Provider_Roles and
the Provider_UIRoles (user in roles) tables in
conjunction with the other tables. Provider_Roles
contains the information about the roles in the different
portals and the Provider_UIRoles contains the
information of the roles of a particular user.
OraclePersonalisationProvider primarily uses the three
tables:Provider_Paths, Provider_PersonalisationPerUser
and Provider_PersonalisationAllUsers for storing
information about Web parts. Provider_Paths contains
the information about the request paths for the individual
state and also for the shared state. This table is used to
store the settings of individual pages, so that the page
settings of one page do not affect the other page.
Provider_PersonalisationPerUser contains the page
settings and the path settings of the Customizable Web
parts of an individual User.
Provider_PersonalisationAllUsers stores the information
about the shared state of the portal settings.
OracleProfileProvider stores the information and
settings of the registered and anonymous users in a
single table, Provider_Profiles. OraclePageProvider is
the custom built provider to suit the needs of the client
and requires all the other providers to implement its
functionality. This provider uses mainly 3 tables:
Provider_Page, Provider_Edit_Page_Roles, and
Provider_View_Page_Roles. The Provider_Page
contains information about all the pages in the Portal,
Provider_Edit_Page_Roles and
Provider_View_Page_Roles contain the information
about the edit and the view roles of for each page.
OracleSiteMapProvider uses the Provider_Page table to
build the site map and to maintain the update, insert and
delete operations to the site map. In addition to these
tables, I have used Triggers, Sequences and Procedures
to ensure the consistency of the database.
6.1 Introduction
This provider model has been designed in a manner to
make the ASP.NET storage flexible and to abstract the
application level code. The code in the ASP.NET
runtime is abstracted from the data source and only the
code in the provider needs to be changed (minimum),
when there is a change in the data source. Also it
accommodates the use of different databases, so that
information can be stored in other databases. In addition
to these benefits, the user interface need not be changed
at all, whenever the data source changes.
All the Providers (custom and built in) inherit from the
Provider Base class, which is the root class for all the
Providers. It contains the name property and the
initialize function, which need to be overridden in the
derived class. The name property specifies the name for
the provider and the initialize function is called by the
ASP.NET runtime, when the provider is initialized. All
the built in providers undergo lazy initialization schema
i.e. they are instantiated when the application using them
accesses it first.
The Page provider (custom) is loaded when the
application first loads using the Page Service class
which reads the web.config file, to determine the
parameters that needs to passed to the initialize function.
In this project, Page Provider is derived from Provider
Base and then OraclePageProvider is derived from the
Page Provider. The other providers derive from classes
inherited from Provider Base rather than directly
deriving from the Provider Base class. Each of the
Providers needs to be registered in the Providers section
of the web.config file, which also includes the features
and services of the providers.
For example, the membership provider is registered as:<membership
defaultProvider="OracleMembershipProvider">
<providers>
<clear/>
<add name="OracleMembershipProvider"
type="OracleMembershipProvider,
connectionStringName="ConnectionString1"
applicationName="PDIS2"/>
</providers>
</membership>
Membership element denotes the service and the default
provider which uses the service. The add element
registers the membership provider and it contains the
other parameters necessary for the initialization of the
Provider. There can be many providers for a service, but
the service can use a single provider at a time (default
provider denotes it).
5
Thread Safety
All the providers need to follow certain rules to work in
an efficient and thread safe manner. The initialize
method, which is implemented by all providers, should
ensure that that the provider has necessary permissions,
so that exceptions are not thrown. Also the config
parameter passed to the initialize function by the
ASP.NET runtime should not be null. The initialize
function should call the base class initialize function and
is called every time the provider is initialized. All the
configuration attributes need to be read and configured
appropriately. The application name and the connection
string should be present in the config parameter. The
other issue is the thread safety of the providers. Unlike
the Httpmodules and the Httphandlers which are
instantiated per request, the providers are
instantiated only once for the whole application life
time and they are shared among all the requests. Since
each request is processed on a different thread, different
threads may be accessing the providers at the same time.
Therefore, it is necessary that the providers are thread
safe. Providers which are not thread safe may work
properly in the beginning, but as the load on the system
increases, it may lead to data corruption as different
threads access the same provider. Therefore all the
provider methods except the initialize method need to be
thread safe. The initialize method is never executed
simultaneously on two threads.
All the parameters passed to the providers are obtained
from the web.config file and hence only web.config file
need to be changed and the providers need to intact. The
providers make multiple updates to the database, hence I
have used the concept of transactions, where a
transaction is associated with a command and all the
commands need to be executed properly for committing
the transaction, else the transaction will be aborted. I
have used System.Configuration.Provider namespace,
which contains an exception class Provider Exception
that all the providers throw upon exception.
6.2 OracleMembershipProvider
OracleMembershipProvider class is inherited from the
Membership Provider abstract class, which defines the
interface between the membership service and the data
source. All the methods in the Membership Provider
class need to be overridden and the custom functions as
per the client requirements were added into
OracleMembershipProvider. The functionality of the
membership provider is to act as an interface between
the data source and the membership service, store the
information regarding the site’s registered users,
contains the methods for creating ,deleting ,updating
users , authenticating users , encrypting passwords ,
decrypting passwords , changing passwords etc. Each
user of the site is represented as a MembershipUser
object, which contains the information regarding each
individual users of the portal. All the membership
providers have a property called application name,
which is used for scoping the data that is managed by the
provider. Applications that have same application name,
share the same membership data. Thus we can have
different applications in the same data source because
the membership service uses the application name to
scope the data. The different controls, which use the
OracleMembershipProvider are the Login, Login View,
PasswordRecovery,
LoginStatus,
LoginName,
CreateUserWizard and ChangePassword controls as
shown in Fig 5.
Figure 5: Membership Provider Model
OracleMembershipProvider supports different policies
for password formats. This provider ensures that the
password contains at least one alphanumeric character, a
minimum password length of 6 characters and Password
Strength regular expression support is also enabled. Also
options for Password Reset, Question & Answer,
Maximum Invalid Password Attempts and Password
Retrieval can also be set in the provider. The provider
supports 3 different password formats: Clear, Encrypted
and Hashed. If password is hashed, then Password
Retrieval is not possible. The hash algorithm type used
by the provider is “SHA1”. Password can be changed to
a random password generated by ASP.NET runtime, it
can also be changed to a user defined password or the
password can be sent to the user. This membership
provider also supports account locking of a particular
user, if the user is not active for a long period or has
failed the login multiple times. A user will not be able to
login back until his account is unlocked. The
OracleMembershipProvider and the other providers
make use of helper classes like the sec-util, Oracle
Connection classes which help in validating the
6
parameters of the user creation, password creation, user
updating functions etc. OracleProviderSchema class
creates the tables for all the providers, when the portal is
being setup for the first time. This class creates all the
tables, procedures, sequences and triggers and also
validates the tables, if the tables have already been
established.
6.3 OracleRoleProvider
OracleRoleProvider class is inherited from the Role
Provider abstract class, which defines the interface
between the role service and the data source. All the
methods in the role Provider class need to be overridden
and the custom functions as per the client requirements
were added into OracleRoleProvider. The functionality
of the role provider is to act as an interface between the
data source and the roles service, to store the
information regarding the different roles in the sites,
contains the methods for creating, deleting, updating
roles, adding users to roles, removing users from roles
etc. Roles provider should be enabled by enabling the
Role provider in the web.config. The role provider is
scoped depending on the application name and hence the
same data source can contain roles of different portals.
The role manager is responsible for using the role
provider in the ASP.NET configuration for
implementing its functions. The Role Manager uses the
different functions in the role provider to manage the
roles as shown in the Fig 6.
Figure 6: Role Provider Model
class need to be overridden and the custom functions as
per the client requirements were added into
OracleProfileProvider. The main functionality of the
profile provider is to write profile property values to the
data source and read values back from the data source
.The OracleProfileProvider also contains methods for
creating profiles, loading profiles, deleting the inactive
profiles, Getting all the Profiles, Getting the Property
values ,Setting the Property values etc. Profile data is
scoped by user name and hence the user has his profile
stored separately. User name is used as the key to store
the profile data, but for anonymous users, a randomly
generated id is used for storing the profiles. The heart of
the Profile provider is the two functions
GetPropertyValues and SetPropertyValues.
When GetPropertyValues function is called, username
and a flag indicating the authentication state of the user
is passed to the method. If the authentication is false, the
then the user is anonymous else the user is registered.
This method requests properties defined in the
web.config file in the profile section which is declared
as follows: <anonymousIdentification enabled="true"/>
<profile defaultProvider="OracleProfleProvder">
<providers>
<add name="OracleProfileProvider"
type="OracleProfileProvider"
connectionStringName="ConnectionString1"
applicationName="PDIS2"/>
</providers>
<properties>
<add name="Name" allowAnonymous="true"/>
<add name="Age" allowAnonymous="true"
type="System.Int16"/>
</properties>
</profile>
The Name and the age of the user (authenticated and
anonymous) is stored in the database. SetPropertyValues
function is used to set the properties of the objects
defined in the profile section. It uses the serialize and
deserialize properties to store and retrieve the data from
the objects created, when it is stored in the database.
When requested, it provides serialized data to ASP.NET
because sometimes not all properties may be needed.
6.4 OracleProfileProvider
OracleProfileProvider class is inherited from the Profile
Provider abstract class, which derives from
SettingsProvider class. OracleProfileProvider class
defines the interface between the profile service and the
data source. All the methods in the SettingsProvider
6.5 OraclePersonalisationProvider
OraclePersonalisationProvider class is inherited from the
Personalisation Provider abstract class, which derives
from Provider Base class. OraclePersonalisationProvider
class defines the interface between the web part
Personalisation service and the data source. The main
functionality of the Personalisation provider is to store
the Personalisation state about the layout of the web
parts for different users in different pages in the
database. The Personalisation service serializes and
deserializes Personalisation state and returns the state to
the provider as opaque bytes. The main function of this
7
provider is to transfer the array bytes to and from the
database. OraclePersonalisation provider overrides the
LoadPersonalisationBlobs, ResetPersonalisationBlobs,
SavePersonalisationBlobs, FindState, ResetUserState,
ResetState functions of the base provider. Web Parts
Personalisation data is scoped by the username and the
path because username allows to store the
Personalisation state for each user and path allows
storing the state of different pages for a particular user.
In addition to user state, this provider also supports
shared state, which is dependent of the path.
Figure 7: Personalisation Provider Model
6.6 OracleSiteMapProvider
OracleSiteMapProvider class is inherited from the
StaticSiteMap Provider class (default implementations),
which
derives
from
SiteMapProvider
class.
OracleSiteMapProvider class defines the interface
between the sitemap service and the data source. The
main functionality of the OracleSiteMapProvider is to
read the data from the data source and build an upside
down tree of sitemap node objects and to provide
methods for retrieving nodes from the database. Each
sitemap node in the tree is represented as one node in the
site map. Each node has title, url, parent node,roles and
child node properties associated with it, which help in
the navigation of the tree. Once the sitemap is built, it is
cached in memory and the static site map provider does
not load every time the application starts. The cache
needs to be invalidated, in order to load the site map
again. When the sitemap is initialized, a dependency is
created on the site map stored in the cache. Whenever
database changes i.e. invalidation occurs, ODP (Oracle
Data Provider) raises a delegate which clears the cache
dependency and the cache becomes invalidated, which
loads the sitemap again. This is particularly useful in
admin section of the portal, when pages need to be
created and deleted very often. This provider makes use
of the OracleCacheDependency class, which handles the
notification from the database and clears the cache, once
the
cache
is
invalidated.
Also
the
OracleSiteMapProvider supports security trimming i.e.
nodes are visible to the user depending on the user roles.
6.7 OraclePageProvider
OraclePageProvider is inherited from the Page Provider,
which in turn derives from the Provider Base. Page
Provider is an abstract class containing methods, which
need to be implemented in OraclePageProvider. This
Provider is based on a Custom Service i.e. Page Service
unlike the other providers, which use built in services.
OraclePageProvider contains methods for creating
pages, deleting pages, changing the site properties,
deleting pages (sending to recycle bin), deleting pages
permanently, restoring pages from recycle bin and
moving the pages up and down in the hierarchy.
OraclePageProvider works in conjunction with the
OracleSiteMapProvider, where a tree control is
represented as the pages in the portal, and the tree
control uses the Site map provider. To perform
operations on the tree control, OraclePageProvider is
used
and
for
rebuilding
the
sitemap,
OracleSiteMapProvider is used. This was the most
difficult provider to write in the whole project as I had to
learn lot of new concepts to implement this provider.
(Caching, ODP, sitemap, initialization schemes, creating
the service, and loading the providers).
Figure 8: Page Provider Model
Figures 9 and 10 show the class diagram for the whole
provider model and pages layout and interaction with the
various providers for the Admin section
8
Figure 9: Class Diagram (Provider Model)
9
Figure 10: Portal Admin Section Class Diagram
ADMIN SECTION
User_Control.ascx
CreateUserWizard
DeleteUser
UpdateUser
ChangePassword
AddUserToRole
MEMBERSHIP SERVICE
Role_Control.ascx
Page_Control.ascx
Site_Control.ascx
CreateRole
DeleteRole
RoleExists
AddUsersToRoles
UpdateDescriptionforRole
GetDescription
Get_RoleId
updateRoleName
RemoveUsersFromRoles
CreatePage
AddEditRolesToPages
RemoveEditRolesFromPages
AddViewRolesToPages
RestorePagesFromRecycleBin
DeletePagesFromRecycleBin
DeletePage
MovePage_Down
MovePage_Up
GetRoleId
RoleExists
AddUsersToRoles
BuildSiteMap
CreateRootNode
GetPage
GetSite
UpdatePage
UpdateSite
ROLES SERVICE
PAGE SERVICE
SITEMAP SERVICE
10
7. Testing
I have used Microsoft Application Center Test and ANTS Load (Advanced .NET testing system) to perform the Load
testing for the portal built using the providers. Also, I performed NUnit testing to test the functions in the provider. I
could not test all the functions in the Personalisation and profile provider because some of the functions were using clobs
to store the data in the database. But, I could test all the other functions in other providers.
NUnit is a unit testing Framework for all the .NET languages. It was initially imported from JUnit and is entirely written in
C#. It has lot of features, which take advantage of the .NET language features like custom attributes and other reflection
capabilities. [3]
ANTS Load is used for determining a web applications performance under varying loads. It simulates multiple clients
accessing the website at the same time and indicates the performance under these conditions. [4]
Microsoft Application Center Test is used for performing stress tests to Web Server and determines the performance and
scalability problems with the Applications. It simulates multiple users accessing the website by opening multiple
connections and sending HTTP requests. [5]
7.1 NUnit
Figure 11: NUnit Testing Snapshot
A Green light indicates success,
yellow indicates failure. All the
functions need to return correct
values, in order to get green
light.
Functions being tested by the
NUnit. Different functions in the
Membership, Roles, Page,
Profile etc are being tested
I used NUnit to perform the functional testing. I wrote test cases, which verify whether the value returned by a function
is same as the one expected. I could write test cases for most of the functions, but for some functions, I could not verify the
return value because I could not determine the value returned by the functions (clobs). A green light in the GUI indicates
the test was successful and yellow indicates that it has failed.
11
Figure 13: Web Request – Time to connect
7.2 ANTS (Advanced .NET Testing System)
Summary Information by Object
This section shows the average timings for each
object for this test. This can be used to find the fastest,
and slowest, objects in the web application. Note that all
timings are in milliseconds.
#
Name
Time to
Connect
Time to
first byte
Time to
last byte
Bytes
Received
1
2
Web Resource
Default.aspx
3
99
3
99
3
105
264
18664
The average time taken to connect to the home page
is 99ms as shown in the above figure. Also, the average
time taken for the first and the last byte is 99 and 105
milliseconds .The time taken for the last byte is not very
high , indicating that there were very less errors.
Figure 14: Web Request – Time to last byte
Figure 12: Web Request – Time to connect
Figure 15: Web Request – Bytes received
The time taken to connect for 58 requests is less than
50 milliseconds and the time taken to taken to connect
some other requests is 200 to 300 seconds. The same
performance is seen for the time taken for the last byte
and time taken for the first byte. The total no of bytes
received for 55 requests is in the range of 200 to 500.
12
7.3 Microsoft Application Center Test
Using Microsoft Application Center Test, I simulated the web application’s performance under varying loads. VB Script is
used as the language for creating the testing logic. As shown in the results summary, a total of 139,902 requests for made
to the Web server. There was an average of 466 requests per second, the time taken for the first byte was 1.19 milliseconds
and the time taken for the last byte was 1.24 milliseconds. If there were any errors, then the time taken for the last byte
would have been really high, but it was very less in this case. 97.95 % of the times, the requests completed successfully,
whereas 2.05 % of the requests received an error because of the changes in the URL. These errors were because every
request did not get the same page and also the pages were requested depending on the tab ids of the pages and some of
these tab ids did not exist.
I performed these tests using the resources (Hardware & Software) mentioned in section 3.3, when the laptop was
operating using the 802.11b wireless connection. As shown in the summary, a total of 825 MB of data was received in 270
seconds. A total of 573 test iterations were performed in 5 minutes. The average bandwidth was 3MBps in this test
scenario.
Figure 16: Microsoft Application Test Center Results Summary
13
8. Problems Faced
11. References
a) Cache Dependency: For the OracleSiteMapProvider,
built in features were available only for SQL Server for
invalidating the cache. But very little documentation was
available of Oracle. In order to invalidate the cache, I
had to learn a lot of other features like ODP.NET for
database invalidation, SQL Cache Dependency, security
trimming etc.
b) In the beginning, I could not understand how the
initialize function for the provider was getting called. I
had to go through a lot of documentation of the
ASP.NET runtime to determine its working model.
c) Implementation of the OraclePersonalisationProvider
required a lot of additional helper functions, which had
a lot of functionality for serializing and deserializing
data.
d) Very little documentation was available on the
provider implementation for Oracle Databases. All the
documentation available was for SQL Server.
e) IIS (Internet Information Services) was giving me
problems while installation of Visual Studio 2005 and
also during the testing phase of the project. I could
overcome this by reinstalling IIS. IIS on the laptop could
accept only limited no of connections, hence testing was
limited.
[1] ASP.NET 2.0 Provider Model: Introduction to the
Provider Model. (Microsoft Corporation, October
2005)
http://msdn.microsoft.com/asp.net/downloads/providers/
default.aspx
[2] Oracle Data Provider for .NET, Feature Overview.
(Oracle, August 2002)
http://www.oracle.com/technology/tech/windows/odpnet
/ODP.NET-FOV.html
[3] NUnit: http://www.nunit.org/
[4] ANTS (Advanced .NET Testing System)
http://www.red-gate.com/products/ants_load/index.htm
[5] Microsoft Application Test Center
(Shrijeet Nair, 09/17/2002).
http://www.c-sharpcorner.com /Code/2002/ Sept/
AppTestCenter.asp
[6] Oracle 10g Features
http://www.oracle.qassociates.co.uk/oracle-10g.htm
9. Lessons Learnt
I started this project with a view to understand the
internals of ASP.NET. During the course of
implementing this project, I learnt a lot of new features
of ASP.NET like Caching, Httphandlers, Httpmodules,
the complete Provider model, the database – cache
dependencies, IIS configuration issues, authentication &
authorization in ASP.NET, Secured sockets layer, page
life cycle and lot of other internals. I also wanted to
learn AJAX, if time permitted.
10. Future Work
There are a number of other providers like Session
State, Web Events, and Module Providers that can be
implemented. Also, the pages of the portal can be
generated dynamically without having any physical page
present. Depending on the URL, the Web parts can be
loaded dynamically into the pages and the events can be
handled in the component files. Web Parts are an
important part of Visual Studio 2005 and there is a lot of
scope in learning and implementing these Web parts.
14