sql >> Base de Datos >  >> RDS >> Oracle

Problema extraño de membresía ASP

Pregunta anterior aquí, pero me encontré con ella y quería compartir algunos detalles más.

Primero, la solución más fácil si necesita hacer un <clear/> en su bloque connectionStrings es agregar una entrada de cadena de conexión OraAspNetConString en blanco nuevamente en su web.config:

<connectionStrings>
    <clear />
      <add name="OraAspNetConString" connectionString=" "/>    
</connectionStrings>

Qué sucede cuando instala el paquete Oracle .NET en cualquiera de sus máquinas, instala una tonelada de proveedores diferentes en su máquina.config junto con OraAspNetConString como una cadena de conexión a nivel de máquina. El <clear/> El elemento se deshace de OraAspNetConString y, gracias a las adiciones de Oracle machine.config, todos los demás proveedores de Oracle cargados de forma predeterminada fallan cuando no pueden encontrar la cadena de conexión.

La otra respuesta aquí en la que exploró el uso del elemento para proveedores de membresía no funcionó porque la mayoría de los otros proveedores de Oracle agregados en machine.config seguirán buscando ese OraAspNetConString por lo tanto, borrar solo ese proveedor no lo ayuda.

Estos son todos los proveedores que instalaron en mi máquina.config:

<membership><providers>
    <add name="OracleMembershipProvider" type="Oracle.Web.Security.OracleMembershipProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName="" />
</providers></membership>
<profile><providers>
    <add name="OracleProfileProvider" type="Oracle.Web.Profile.OracleProfileProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName=""/>
</providers></profile>
<roleManager><providers>
    <add name="OracleRoleProvider" type="Oracle.Web.Security.OracleRoleProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName=""/>
</providers></roleManager>
<siteMap><providers>
    <add name="OracleSiteMapProvider" type="Oracle.Web.SiteMap.OracleSiteMapProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName="" securityTrimmingEnabled="true"/>
</providers></siteMap>
<webParts>
  <personalization>
    <providers>
      <add name="OraclePersonalizationProvider" type="Oracle.Web.Personalization.OraclePersonalizationProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName=""/>
    </providers>
  </personalization>
</webParts>
<healthMonitoring><providers>
    <add name="OracleWebEventProvider" type="Oracle.Web.Management.OracleWebEventProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" buffer="true" bufferMode="OracleNotification"/>
</providers></healthMonitoring>

Entonces, si no desea agregar el OraAspNetConString en blanco, debe asegurarse de <clear/> cada uno de los siguientes proveedores de Oracle o ingrese y agregue un <remove name=x /> elemento a cada clase de proveedor como este:

<membership><providers>
    <remove name="OracleMembershipProvider" />
</providers></membership>
<profile><providers>
    <remove name="OracleProfileProvider" />
</providers></profile>
<roleManager><providers>
    <remove name="OracleRoleProvider" />
</providers></roleManager>
<siteMap><providers>
    <remove name="OracleSiteMapProvider" />
</providers></siteMap>
<healthMonitoring><providers>
    <remove name="OracleWebEventProvider" />
</providers></healthMonitoring>

Nunca traté con ningún mapa del sitio o código de monitoreo de salud en mi aplicación web, pero aun así tuve que agregar manualmente estos <remove/> elementos para los diferentes proveedores en mi web.config o algo fallaría al buscar una cadena de conexión OraAspNetConString que no estaba allí.