| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- //------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------
- namespace System.ServiceModel.Activation
- {
- using System.Reflection;
- using System.Runtime;
- using System.Runtime.CompilerServices;
- using System.ServiceModel;
- using System.Web.Security;
- // Note: The helper provides utility in safe access of System.Web methods for both client and extended SKUs.
- static class SystemWebHelper
- {
- static Type typeOfRoles;
- static Type typeOfMembership;
- static Type typeOfWebContext;
- static bool defaultRoleProviderSet;
- static RoleProvider defaultRoleProvider;
- static Type TypeOfRoles
- {
- get
- {
- if (typeOfRoles == null)
- {
- typeOfRoles = GetSystemWebType("System.Web.Security.Roles");
- }
- return typeOfRoles;
- }
- }
- static Type TypeOfMembership
- {
- get
- {
- if (typeOfMembership == null)
- {
- typeOfMembership = GetSystemWebType("System.Web.Security.Membership");
- }
- return typeOfMembership;
- }
- }
- static Type TypeOfWebContext
- {
- get
- {
- if (typeOfWebContext == null)
- {
- typeOfWebContext = GetSystemWebType("System.Web.Configuration.WebContext");
- }
- return typeOfWebContext;
- }
- }
- static Type GetSystemWebType(string typeName)
- {
- #pragma warning disable 436
- return Type.GetType(typeName + ", " + AssemblyRef.SystemWeb, false);
- #pragma warning restore 436
- }
- // Invoke for System.Web.Security.Roles.Enabled ? System.Web.Security.Roles.Provider : null
- internal static RoleProvider GetDefaultRoleProvider()
- {
- if (defaultRoleProviderSet)
- {
- return defaultRoleProvider;
- }
- Type roleType = TypeOfRoles;
- RoleProvider result = null;
- if (roleType != null)
- {
- // Running on extended sku
- try
- {
- PropertyInfo rolesEnabledPropertyInfo = roleType.GetProperty("Enabled");
- Fx.Assert(rolesEnabledPropertyInfo != null, "rolesEnabledPropertyInfo must not be null!");
- if (((bool)rolesEnabledPropertyInfo.GetValue(null, null)) == true)
- {
- PropertyInfo rolesProviderPropertyInfo = roleType.GetProperty("Provider");
- Fx.Assert(rolesProviderPropertyInfo != null, "rolesProviderPropertyInfo must not be null!");
- result = rolesProviderPropertyInfo.GetValue(null, null) as RoleProvider;
- }
- }
- catch (TargetInvocationException exception)
- {
- // Since reflection invoke always throws TargetInvocationException,
- // we need to (best effort) maintain the exception contract by rethrow inner exception.
- if (exception.InnerException != null)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(exception.InnerException);
- }
- throw;
- }
- }
- else
- {
- // Running in client SKU
- // This is consistent with no provider
- }
- defaultRoleProvider = result;
- defaultRoleProviderSet = true;
- return result;
- }
- // Invoke for System.Web.Security.Roles.Providers[roleProviderName]
- internal static RoleProvider GetRoleProvider(string roleProviderName)
- {
- Type roleType = TypeOfRoles;
- if (roleType != null)
- {
- try
- {
- // Running on extended sku
- PropertyInfo roleProvidersPropertyInfo = roleType.GetProperty("Providers");
- Fx.Assert(roleProvidersPropertyInfo != null, "roleProvidersPropertyInfo must not be null!");
- // This could throw if RoleManager is not enabled.
- object roleProviderCollection = roleProvidersPropertyInfo.GetValue(null, null);
- Fx.Assert(roleProviderCollection != null, "roleProviderCollection must not be null!");
- PropertyInfo itemPropertyInfo = roleProviderCollection.GetType().GetProperty("Item", new Type[] { typeof(string) });
- Fx.Assert(itemPropertyInfo != null, "itemPropertyInfo must not be null!");
- return (RoleProvider)itemPropertyInfo.GetValue(roleProviderCollection, new object[] { roleProviderName });
- }
- catch (TargetInvocationException exception)
- {
- // Since reflection invoke always throws TargetInvocationException,
- // we need to (best effort) maintain the exception contract by rethrow inner exception.
- if (exception.InnerException != null)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(exception.InnerException);
- }
- throw;
- }
- }
- // Running in client SKU
- // This is consistent with no provider is a given name.
- return null;
- }
- // Invoke for System.Web.Security.Membership.Provider
- internal static MembershipProvider GetMembershipProvider()
- {
- Type membershipType = TypeOfMembership;
- if (membershipType != null)
- {
- try
- {
- PropertyInfo membershipProviderPropertyInfo = membershipType.GetProperty("Provider");
- Fx.Assert(membershipProviderPropertyInfo != null, "membershipProviderPropertyInfo must not be null!");
- return (MembershipProvider)membershipProviderPropertyInfo.GetValue(null, null);
- }
- catch (TargetInvocationException exception)
- {
- // Since reflection invoke always throws TargetInvocationException,
- // we need to (best effort) maintain the exception contract by rethrow inner exception.
- if (exception.InnerException != null)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(exception.InnerException);
- }
- throw;
- }
- }
- // Running in client SKU
- // This is consistent with no default provider.
- return null;
- }
- // Invoke for System.Web.Security.Membership.Providers[membershipProviderName]
- internal static MembershipProvider GetMembershipProvider(string membershipProviderName)
- {
- Type membershipType = TypeOfMembership;
- if (membershipType != null)
- {
- try
- {
- PropertyInfo membershipProvidersPropertyInfo = membershipType.GetProperty("Providers");
- Fx.Assert(membershipProvidersPropertyInfo != null, "membershipProvidersPropertyInfo must not be null!");
- object membershipProviderCollection = membershipProvidersPropertyInfo.GetValue(null, null);
- Fx.Assert(membershipProviderCollection != null, "membershipProviderCollection must not be null!");
- PropertyInfo itemPropertyInfo = membershipProviderCollection.GetType().GetProperty("Item", new Type[] { typeof(string) });
- Fx.Assert(itemPropertyInfo != null, "itemPropertyInfo must not be null!");
- return (MembershipProvider)itemPropertyInfo.GetValue(membershipProviderCollection, new object[] { membershipProviderName });
- }
- catch (TargetInvocationException exception)
- {
- // Since reflection invoke always throws TargetInvocationException,
- // we need to (best effort) maintain the exception contract by rethrow inner exception.
- if (exception.InnerException != null)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(exception.InnerException);
- }
- throw;
- }
- }
- // Running in client SKU
- // This is consistent with no provider is a given name.
- return null;
- }
- // check if ((System.Web.Configuration.WebContext)configHostingContext).ApplicationLevel == WebApplicationLevel.AboveApplication
- internal static bool IsWebConfigAboveApplication(object configHostingContext)
- {
- Type webContextType = TypeOfWebContext;
- if (configHostingContext == null
- || webContextType == null
- || configHostingContext.GetType() != webContextType)
- {
- // if we don't recognize the context we can't enforce the special web.config logic
- return false;
- }
- const int webApplicationLevelAboveApplication = 10; // public value of the enum
- Fx.Assert(GetSystemWebType("System.Web.Configuration.WebApplicationLevel") != null, "Type 'System.Web.Configuration.WebApplicationLevel' MUST exist in System.Web.dll.");
- Fx.Assert(GetSystemWebType("System.Web.Configuration.WebApplicationLevel").GetProperty("AboveApplication") == null ||
- (int)GetSystemWebType("System.Web.Configuration.WebApplicationLevel").GetProperty("AboveApplication").GetValue(null, null) == webApplicationLevelAboveApplication,
- "unexpected property value");
- try
- {
- PropertyInfo applicationLevelPropertyInfo = webContextType.GetProperty("ApplicationLevel");
- Fx.Assert(applicationLevelPropertyInfo != null, "applicationLevelPropertyInfo must not be null!");
- return (int)applicationLevelPropertyInfo.GetValue(configHostingContext, null) == webApplicationLevelAboveApplication;
- }
- catch (TargetInvocationException exception)
- {
- // Since reflection invoke always throws TargetInvocationException,
- // we need to (best effort) maintain the exception contract by rethrow inner exception.
- if (exception.InnerException != null)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(exception.InnerException);
- }
- throw;
- }
- }
- }
- }
|