2012-02-07 12 views
6

Sto utilizzando il provider Sitemap predefinito with secutiry trimming. Ma, in qualche modo, ottengo:Sitemap Security Taglio genera errore SQL

A network-related or instance-specific error occurred while establishing a connection to SQL Server.

sto pensando il provider del sito è alla ricerca di ruoli nel posto sbagliato. La mia configurazione è simile a questo:

<connectionStrings> 
    <add name="DB" ... /> 
</connectionStrings> 


    <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15"> 
     <providers> 
     <clear/> 
     <add name="SqlProvider" .../> 
     </providers> 
    </membership> 
    <roleManager enabled="true"> 
     <providers> 
     <add connectionStringName="DB" type="System.Web.Security.SqlRoleProvider" ... /> 
     </providers> 
    </roleManager> 

Il tag del sito si definisce in questo modo:

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true" > 
     <providers> 
      <clear/> 
      <add name="XmlSiteMapProvider" 
      description="Default SiteMap provider." 
      type="System.Web.XmlSiteMapProvider " 
      siteMapFile="Web.sitemap" 
      securityTrimmingEnabled="true" /> 
     </providers> 
    </siteMap> 

Perché mi appare l'errori di SQL? In che modo la rifinitura ottiene i ruoli?

EDIT: the ysod

+0

Ciao, Potete per favore mettere fuori l'eccezione esatta che stai ricevendo + alcuna traccia dello stack. –

+0

E tu sei assolutamente sicuro che la connessione DB sia, in effetti, corretta? – Vedran

+0

È il tuo asp: sitemapdatasource quindi come

risposta

2

L'errore di base dal vostro screenshot è

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server

purtroppo, questo viene troncato. In genere, il messaggio continua con "è configurato per consentire le connessioni remote.", e questo può essere seguito da un motivo specifico (ad esempio, lo potrebbe stato (tra i vari altri motivi) "provider: Interfacce di rete SQL , errore: 26 - Errore individuazione server/istanza specificata ")

Tuttavia, con il messaggio che hai finora, sembra un problema di connettività tra il computer client e il riquadro SQL Server. Quindi mi piacerebbe guardare a fare due diligence nei confronti del dialogo SQL Server e la connettività di rete prima:

  • Il nome del server di SQL Server è in grado di risolvere
  • che il server può essere raggiunto con ping
  • Tale server SQL è configurato per accettare connessioni remote
  • che il servizio SQL Browser è in esecuzione sul dialogo SQL Server
  • che Windows Firewall non è sempre nel modo
  • che si SQL Server è effettivamente in esecuzione in f irst place

Se passano, è necessario convalidare di quanto non si possa accedere. Normalmente utilizzerei gli strumenti di gestione SQL, in particolare lo strumento da riga di comando sqlcmd per testare la connettività di base (ad esempio: sqlcmd -E -S mysqlserver\instance da connettere al database predefinito o sqlcmd -E -S mysqlserver\instance -d database per connettersi a un database specifico). Ovviamente dovrai eseguirli come utente in cui è in esecuzione l'applicazione web, altrimenti tenteranno di autenticarti (oppure utilizzare runas o avviare un prompt dei comandi con credenziali diverse [trovare un prompt dei comandi nel menu Start quindi , fai clic con il tasto destro del mouse -> "Esegui come un altro utente".

Tuttavia ciò che alla fine sarebbe di aiuto sarebbe se si potesse ottenere il testo del messaggio di errore completo (piuttosto che la versione troncata), quindi ciò potrebbe aiutare a restringere il problema specifico che stai avendo.

0

Prova questa mappa del sito di lavoro:

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true"> 
    <providers> 
    <add name="XmlSiteMapProvider" description="SiteMap provider which reads in .sitemap XML files." type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" siteMapFile="web.sitemap" securityTrimmingEnabled="true" /> 
    </providers> 
</siteMap> 
+0

genera ancora stesso errore. :( – robasta

0

Vorrei provare a creare un progetto nuovo di zecca con solo il provider di ruoli predefinito e la funzione di sicurezza e vedere se riesci a farlo funzionare.

0

Se SqlRoleProvider funziona senza ritaglio di sicurezza abilitato, la mia prima ipotesi sarebbe che ci sia qualcosa sul tuo database o stringa di connessione che impedisce più connessioni simultanee. Sarebbe molto più semplice valutare se fosse possibile fornire i dettagli della stringa di connessione DB ...

0

In generale, la configurazione sembra corretta. Secondo il messaggio dell'eccezione, il database non è disponibile. Vuoi verificare se un database può essere collegato o meno?

using (SqlConnection connection = new SqlConnection()) { 
    connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DB"].ConnectionString; 
    try { 
     connection.Open(); 
    } 
    catch() { 
     ... 
    } 
} 

“Steps to troubleshoot SQL connectivity issues”