Rubando un po di tempo alla "miniera" ,tra una picconata in vb6 e una in ASP Classic, sto sviluppando un'applicazione in ASP.NET...e subito mi sono imbattuto in un problema strano...dunque...
Ho abilitato l'autenticazione di tipo Forms da web.config, ho creato il db con l'apposito tool ma come database "classico" di sql server 2008...ho configurato correttamente il provider....infatti il tutto in ambiente di sviluppo funziona, cioè funziona quando visual studio lancia il suo web server (cassini)....ma se sposto il tutto sotto iis non funziona più nulla, cioè mi appare la pagina di login ma se metto il profilo utente corretto non mi fa andare avanti....ho anche creato una pagina di login senza usare il controllo login, usando le Membership api con lo stesso risultato. Credo a questo punto che manchi qualcosa nella configurazione di iis...(iis 6 su windows server 2003)...ma cosa? a me sembra tutto ok !!! Infatti se vado sulle proprietà della cartella virtuale mi evidenzia che è attivata l'autenticazione forms!!!Qualcuno "in ascolto" ha un'idea...un suggerimento?
Saluti e grazie a tutti...torno, per ora, al mio caro vb6
Marco
Ciao Marco,
puoi postare il tuo web.config? n occhi vedono meglio di 2. Naturalmente diamo per scontato che:
1. Il server su cui è installato Sql server sia raggiungibile dal server delle applicazioni (nel caso non sia lo stesso)
2. Stai usando auteticazione mista (Windows e Sql Server) e l'account che usi è funzionante (basta provare da management studio che riesci a connetterti con quell'account, controlla pure che riesci ad aprire le tabelle)
<?xml version="1.0"?><!-- Nota: come alternativa alla modifica manuale del file, è possibile utilizzare lo strumento di amministrazione Web per configurare le impostazioni dell'applicazione. Utilizzare il comando Configurazione ASP.NET del menu Sito Web di Visual Studio. Un elenco completo di impostazioni e commenti è disponibile nel file machine.config.comments che si trova in genere in \Windows\Microsoft.Net\Framework\v2.x\Config --><configuration> <configSections> <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/> <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> </sectionGroup> </sectionGroup> </sectionGroup> </configSections> <appSettings> <add key="CNDB" value="data source=(local);initial catalog=GEMAGRF2;uid=sa;pwd=xxxxxx;" /> <add key="PATH_LOG" value="c:\LOG_ACTIVITY" /> </appSettings> <connectionStrings> <add name="CN_STRING" connectionString="Data Source=(local);Initial Catalog=GEMAGRF2;User ID=sa;Password=xxxxxx" providerName="System.Data.SqlClient" /> <remove name="LocalSqlServer"/> <add name="LocalSqlServer" connectionString="data source=(local);Initial Catalog=sicurezza;uid=sa;pwd=xxxxxxx" providerName="System.Data.SqlClient"/> </connectionStrings> <system.web> <!-- Impostare compilation debug="true" per inserire i simboli di debug nella pagina compilata. Poiché tale operazione ha effetto sulle prestazioni, impostare questo valore su true solo durante lo sviluppo. --> <compilation debug="true" defaultLanguage="c#"> <assemblies> <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> </assemblies> </compilation> <!-- La sezione <authentication> consente di configurare la modalità di autenticazione della sicurezza utilizzata da ASP.NET per identificare un utente in ingresso. --> <authentication mode="Forms"> <forms loginUrl="Login.aspx" cookieless="AutoDetect" /> </authentication> <authorization> <deny users="?"/> </authorization> <membership> <providers> <clear /> <add minRequiredNonalphanumericCharacters="0" minRequiredPasswordLength="4" connectionStringName="LocalSqlServer" name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" /> </providers> </membership> <!-- La sezione <customErrors> consente di configurare l'operazione da eseguire in caso di errore non gestito durante l'esecuzione di una richiesta. In particolare, consente agli sviluppatori di configurare le pagine di errore HTML in modo che vengano visualizzate al posto dell'analisi dello stack dell'errore. <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound.htm" /> </customErrors> --> <pages> <controls> <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </controls> </pages> <httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/> </httpHandlers> <httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </httpModules> </system.web> <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <providerOption name="CompilerVersion" value="v3.5"/> <providerOption name="WarnAsError" value="false"/> </compiler> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <providerOption name="CompilerVersion" value="v3.5"/> <providerOption name="OptionInfer" value="true"/> <providerOption name="WarnAsError" value="false"/> </compiler> </compilers> </system.codedom> <!-- La sezione system.webServer è richiesta per eseguire ASP.NET AJAX in Internet Information Services 7.0. Non è necessaria per la versione precedente di IIS. --> <system.webServer> <validation validateIntegratedModeConfiguration="false"/> <modules> <remove name="ScriptModule"/> <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </modules> <handlers> <remove name="WebServiceHandlerFactory-Integrated"/> <remove name="ScriptHandlerFactory"/> <remove name="ScriptHandlerFactoryAppServices"/> <remove name="ScriptResource"/> <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </handlers> </system.webServer> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/> <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/> <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/> </dependentAssembly> </assemblyBinding> </runtime></configuration>
Come si vede per fare i test ho usato il profilo sa...è chiaro che in produzione non sarà quello...e la macchina su cui è installato sql server è la stessa di dove gira IIS...il mistero si infittisce?
Che versione stai usando di sql server ? la express?
Sql Server 2008 Standard...
La connectionstring sembra apposto, giusto per tentarne un'altra proverei a sostituire localhost con l'ip o il nome della macchina...
Mi spiace...dice sempre "tentativo di accesso non riuscito. Riprovare".......altri suggerimenti? Ditemi di si......
comincia a pensare ad un problema legato alla tua macchina. Se mi mandi il progettino e lo script del db faccio una prova sul mio server. Almeno ci togliamo il dubbio che sia la tua macchina il problema.
Se posso dire la mia...1) proverei a connettermi al database utilizzando SQL Server Management Studio per controllare che non ci sono problemi2) qual'è il messaggio di errore? Prova a connetterti con un pagina di test dove provi ad aprire la connessione3) ho notato che c'è una piccola differenza nella definizione delle connection string, in particolare mi riferisco alle keyword che specificano username e password: in una sono utilizzate User ID e Password, nell'altra uid e pwd
Certo che puoi dire la tua...anzi devi...lo spirito di una comunity è proprio quello di discutere liberamente di queste cose...
ma veniamo alle mie dolenti note...ho provato già a connettermi da una pagina di test...e funziona...ho addirittura usato il profilo sa come si può vedere per la disperazione!!!...il tipo di errore che da non è un eccezione ma un messaggio del controllo login di asp.net che dice che la connessione non ha avuto esito posistivo...ritentare...secondo me non è un problema di connessione al db ma di iis configurato male ma non riesco a capire dove!!!!
Per ora l'applicazione gira senza controllo di accesso Aiuto!!!
Dimenticavo...ho anche provato a cambiare uid in user id..e pwd in password...senza risulatato!!!
Se riesci a inviarmi il materiale ci togliamo il dubbio!
non posso far altro che aggiungere anche le mie ipotesi:
1)Siamo sicuri che il DBMS sia correttamente configurato per le connessioni TCP/IP?
2)Permessi sulle cartelle della webApp di IIS? Ci sono?
Aggiungerei anche una bella SQLEXCEPTION nel try/catch...
Capisc e dotnet tu? No! E allor che parl a fà!
Ragazzi....tutto quello che mi avete suggerito l'ho provato....ma niente.....ho pensato di creare una bella macchina virtuale win2003 "pulita" e mettere tutto su....vediamo che succede....
Appena ho novità vi faccio sapere...
Ciao a tutti posto anche io il mio aiuto sperando di risolvere il problema a Marco.Prima una considerazione sul web.Config.Da ciò che hai postato si evince che ti riferisci ad un'istanza locale di SQL Server. Cioè locale alla macchina nella quale stai deployando il tuo sistema. Corretto?Inoltre proverei a rendere l'Authentication non CookieLess per fare una prova...Se ciò non dovesse andare allora comincerei per prima cosa l'analisi del db partendo da :
Se fatto ciò nn dovesse ancora andare, passerei ad esaminare IIS (visto ke a naso l'applicazione ASP.Net mi sembra istanziata correttamente) :
Se fatto ancora ciò non dovesse andare...bhè credo il problema sia troppo legato a "come" o su "cosa" hai sviluppato l'applicativo...e quindi ti invito a postare maggiori informazioni.
Associazione Culturale DotNetCampania - C.F.: 95127870632