2009-03-16 2 views
4

Я использую API-интерфейс членства в ASP.NET, и я столкнулся со следующей проблемой на моем промежуточном сервере. Приложение отлично работает на моей локальной машине. Таблицы данных хранятся на SQL Server. Как мой локальный, так и промежуточный сервер указывают на тот же сервер БД. Когда я раскрываю в моем промежуточном сервере я получаю следующее сообщение об ошибке:ASP Членство Нечетная проблема

Parser Error Message: The connection name 'OraAspNetConString' was not 
found in the applications configuration or the connection string is empty. 

    Line 135: <roleManager> 
    Line 136:  <providers> 
    Line 137:  <add name="OracleRoleProvider" 

type="Oracle.Web.Security.OracleRoleProvider, Oracle.Web, Version=2.111.6.20, 
Culture=neutral, PublicKeyToken=89b483f429c47342" 
connectionStringName="OraAspNetConString" applicationName="" /> 
    Line 138:  <add name="AspNetSqlRoleProvider" 
connectionStringName="LocalSqlServer" applicationName="/" 
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, 
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    Line 139:  <add name="AspNetWindowsTokenRoleProvider" 
applicationName="/" type="System.Web.Security.WindowsTokenRoleProvider, 
System.Web, Version=2.0.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a" /> 


Source File: 
c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Config\machine.config 
    Line: 137 

Я не знаю, почему она даже не пытается сделать что-нибудь с Oracle, мой web.config не содержит ничего, связанного с Oracle.

У кого-нибудь есть понимание, почему это происходит?

[Изменить] На машине machine.conf на моей локальной машине у меня нет ключа OracleRoleProvider. Но мой сервер промежуточных настроек. Если это поможет.

ответ

0

Эта ошибка говорит, что у вас есть это в файле machine.conf, а не web.config.

+0

Да, но это вне моего контроля ... есть работа вокруг? – DavidS

+0

Простейшим решением было бы выяснить, почему строка соединения оракула находится в файле machine.config. Если вы не можете удалить его, вам необходимо переопределить его. Вы уверены, что у вас есть в вашем web.config, о котором говорил Джош? Я думал, что это должно очистить поставщиков. – dtc

4

Вам нужно определить собственного поставщика в файле конфигурации, например, здесь является поставщиком членство:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15"> 
     <providers> 
      <clear/> 
      <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MyConnection" applicationName="MyApp"/> 
     </providers> 
    </membership> 

В основном это приведет к удалению всех поставщиков, определенных на системном уровне, поэтому мы очищаем, то вы определяете своих новых поставщиков. Если вам нужны провайдеры на системном уровне, вы можете определить свой собственный по умолчанию, или в коде приложения конкретно запросите своего провайдера.

+0

У меня уже есть, что есть. – DavidS

+0

Ну просто добавьте фиктивную строку соединения под названием OraAspNetConString. Если вы уверены, что его удалили, он не должен запускаться. Но это может позволить вам продолжить свой путь. Также убедитесь, что вы сделали это для RoleProvier, а также для членства – JoshBerke

5

Старый вопрос здесь, но я просто столкнулся с ним и хотел поделиться более подробной информацией.

Во-первых, самое простое решение, если вам нужно сделать в вашем ConnectionStrings в <clear/> блок должен добавить пустой OraAspNetConString ConnectionString запись обратно в web.config:

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

Что происходит, когда вы install the Oracle .NET package на любом из ваши машины устанавливают тонну различных поставщиков в ваш machine.config вместе с OraAspNetConString как машинный уровень connectionString. Элемент <clear/> избавляется от этой OraAspNetConString и благодаря дополнениям Oracle machine.config все остальные поставщики Oracle, загруженные по умолчанию, сбой, когда они не могут найти connectionString.

Другой ответ здесь, где вы исследовали, используя элемент для членства провайдеров не работают, потому что большинство других провайдеров оракула добавленных в machine.config по-прежнему будут искать для этого OraAspNetConString так очищая только что один провайдер не помогает.

Это все провайдеры они установлены в моем machine.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> 

Так что, если вы не хотите, чтобы добавить пустую OraAspNetConString вы должны убедиться, что вы либо <clear/> каждый из следующие провайдеры Oracle или пойти и добавить <remove name=x /> элемент в каждом классе поставщика, как это:

<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> 

Я никогда не имел дело с любым кодом Карта сайта или мониторинга состояния здоровья в моем веб-приложение, но я до сих пор вручную добавить эти <remove/> элементов для разных поставщиков в моей сети.config или что-то сработало бы в поисках строки соединения OraAspNetConString, которой не было.

0

Просто добавьте пустой ConnectionString для «OraAspNetConString» работал для меня

<connectionStrings> 
    <clear /> 
    <add name="OraAspNetConString" connectionString=" "/> 
    .................. your other connectionstrings goes here ..... 
</connectionStrings>