Windows2003-3790/inetsrv/uddi/webroot/global.asax

278 lines
7.9 KiB
Plaintext

<%@ Import Namespace='System.Data.SqlClient' %>
<%@ Import Namespace='System.Security.Principal' %>
<%@ Import Namespace='UDDI' %>
<%@ Import Namespace='UDDI.Diagnostics' %>
<%@ Import Namespace='UDDI.Web' %>
<script language='C#' runat='server'>
private const string publisherPages =
"{/register.aspx}" +
"{/validate.aspx}" +
"{/admin/admin.aspx}" +
"{/admin/categorization.aspx}" +
"{/admin/changeowner.aspx}" +
"{/admin/default.aspx}" +
"{/admin/impersonate.aspx}" +
"{/admin/statistics.aspx}" +
"{/admin/taxonomy.aspx}" +
"{/edit/default.aspx}" +
"{/edit/edit.aspx}" +
"{/edit/editbinding.aspx}" +
"{/edit/editbusiness.aspx}" +
"{/edit/editcontact.aspx}" +
"{/edit/editinstanceinfo.aspx}" +
"{/edit/editmodel.aspx}" +
"{/edit/editservice.aspx}" +
"{/edit/explorer.aspx}" +
"{/edit/frames.aspx}" +
"{/edit/help.aspx}";
/// ***********************************************************************
/// public Application_BeginRequest
/// -----------------------------------------------------------------------
/// <summary>
/// Called when page processing is begun.
/// </summary>
/// ***********************************************************************
///
public void Application_BeginRequest( object source, EventArgs eventArgs )
{
//
// Get the virtual path to the script being executed.
//
string thisPage = Request.ServerVariables[ "SCRIPT_NAME" ];
//
// Don't do any further processing for SOAP Web Service files (asmx) and default discoveryURL HTTP handler files (ashx)
// These interfaces handle their own database connections and SSL checks.
//
if( thisPage.IndexOf( ".asmx" ) >= 0 || thisPage.IndexOf( ".ashx" ) >= 0 )
return;
//
// Initialize our context ONCE per request. This call is executeted for both our web site
// as well as the SOAP API.
//
UDDI.Context.Current.Initialize();
//
// Do not remove this call, we need this log information to diagnose issues with
// Context initialization.
//
Debug.Write(
SeverityType.Info,
CategoryType.Website,
"Application_BeginRequest");
//
// Reset the Users Roles to make sure they weren't
// revoked privlages between requests.
//
//
// Don't do this, the Role will be set in the security control, or remain anonymous.
//
// UDDI.Context.User.SetRole( new WindowsPrincipal( WindowsIdentity.GetCurrent() ) );
//
// Get the virual application root path.
// Handle special case when vdir is the root. In this case set it to a blank string to avoid an extra trailing "/".
//
string root = ( "/" == Request.ApplicationPath ) ? "" : Request.ApplicationPath;
//
// At this point we are only dealing with ASP.NET web pages (aspx)
//
Debug.Enter();
thisPage = thisPage.Substring( root.Length );
Debug.Write(
SeverityType.Info,
CategoryType.Website,
"thisPage=" + thisPage );
//
// Determine whether transactions are required. Transactions are required for all publisher pages.
//
bool publisherPage = false;
if( -1 != publisherPages.IndexOf( "{" + thisPage.ToLower() + "}" ) )
publisherPage = true;
//
// If the System Web Server is set to Stop Mode, then write message and
// Stop processing the Request.
//
if( 0==Config.GetInt( "Run", UDDI.Constants.Run ) )
{
Context.AddError( new UDDIException( ErrorType.E_fatalError,Localization.GetString( "ERROR_SITESTOP" ) ) );
Response.End();
}
//
// Check to see if SSL is required.
//
if( publisherPage && 1 == Config.GetInt( "Security.HTTPS", UDDI.Constants.Security.HTTPS ) && !Request.IsSecureConnection )
{
Context.AddError( new UDDIException( ErrorType.E_fatalError,Localization.GetString( "ERROR_HTTPSREQUIRED" ) ) );
//Response.Write( "<h1>Access denied</h1>This page requires a HTTPS secure connection." );
Response.End();
}
//
// Open the write database (UI always goes through the write database).
//
ConnectionManager.Open( true, publisherPage );
Debug.Leave();
}
/// ***********************************************************************
/// public Application_EndRequest
/// -----------------------------------------------------------------------
/// <summary>
/// Called when page processing is completed.
/// </summary>
/// ***********************************************************************
///
public void Application_EndRequest( object source, EventArgs eventArgs )
{
//
// Do not remove this call, we need this log information to diagnose issues with
// Context initialization.
//
Debug.Write(
SeverityType.Info,
CategoryType.Website,
"Application_EndRequest");
//
// Get the virtual path to the script being executed.
//
string thisPage = Request.ServerVariables["SCRIPT_NAME"];
//
// Don't do any further processing for SOAP Web Service files (asmx) and default discoveryURL HTTP handler files (ashx)
// These interfaces handle their own database connections.
//
if( thisPage.IndexOf( ".asmx" ) >= 0 || thisPage.IndexOf( ".ashx" ) >= 0 )
return;
Debug.Enter();
//
// If there is an open database connection, close it. We'll also
// check if there is an open transaction, and if there is, commit
// it.
//
if( Context.Items.Contains( "Connection" ) )
{
if( null != ConnectionManager.GetTransaction() )
{
Debug.Write(
SeverityType.Info,
CategoryType.Website,
"Committing database transaction" );
ConnectionManager.Commit();
}
Debug.Write(
SeverityType.Info,
CategoryType.Website,
"Closing database connection" );
ConnectionManager.Close();
}
Debug.Leave();
}
/// ***********************************************************************
/// public Application_Error
/// -----------------------------------------------------------------------
/// <summary>
/// Called when an unhandled exception is encountered while processing
/// the page.
/// </summary>
/// ***********************************************************************
///
public void Application_Error( object source, EventArgs eventArgs )
{
//
// Get the virtual path to the script being executed.
//
string thisPage = Request.ServerVariables["SCRIPT_NAME"];
//
// Don't do any further processing for SOAP Web Service files (asmx) and default discoveryURL HTTP handler files (ashx)
// These interfaces handle their own errors and database connections.
//
if( thisPage.IndexOf( ".asmx" ) >= 0 || thisPage.IndexOf( ".ashx" ) >= 0 )
return;
Debug.Enter();
//
// Get the virual application root path.
// Handle special case when vdir is the root. In this case set it to a blank string to avoid an extra trailing "/".
//
string root = ( "/" == Request.ApplicationPath ) ? "" : Request.ApplicationPath;
//
// If a database connection is open and there is a transaction
// abort it.
//
if( Context.Items.Contains( "Connection" ) )
{
if( null != ConnectionManager.GetTransaction() )
{
Debug.Write(
SeverityType.Info,
CategoryType.Website,
"Aborting database transaction" );
ConnectionManager.Abort();
}
ConnectionManager.Close();
}
//
// Transfer to an error page.
//
Debug.Write(
SeverityType.Info,
CategoryType.Website,
"Exception was thrown: " + Context.Error.ToString() );
bool frames = ( "true" == Request[ "frames" ] );
Session[ "exception" ] = Context.Error;
Context.ClearError();
Response.Clear();
HttpContext.Current.Response.ClearContent();
Debug.Leave();
Server.Transfer( root + "/error.aspx?frames=" + ( frames ? "true" : "false" ) );
}
</script>