8 messaggi dal 13 settembre 2008
Ciao,
sto cercando di fare in modo che il progetto che ho creato funzioni a prescindere dal sito o cartella in cui si trova.

Per questioni di comodita' ho la cartella che contiene il progetto nel disco D del mio pc.

Quando provo l'applicazione sul browser, quindi sul server virtuale (localhost), la stringa di connessione (a prescindere da come la scrivo) punta al disco C anche se questa lettera non e' presente nel percorso.

Ecco alcune prove fatte in questi giorni.

in Web.Config:

<add key="AccessConn" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=~/App_Data/DBUsers.mdb;"/>



Tentativo1



Nel file aspx cerco di sostituire la tilde con il path della pagina con il codice seguente


Dim Connessione As New OleDbConnection(Replace(System.Configuration.ConfigurationManager.AppSettings("AccessConn"), "~", Request.ApplicationPath.ToString()))


Ottengo la seguente eccezione:

System.Data.OleDb.OleDbException (0x80004005): "C:\webproject\App_Data\DBUsers.mdb" non e' un percorso valido. Assicurarsi che il nome del percorso sia corretto e di essere collegati al server in cui si trova il file.



Tentativo 2


nel file aspx:


Dim Connessione As New OleDbConnection(System.Configuration.ConfigurationManager.AppSettings("AccessConn"))



Eccezione:

System.Data.OleDb.OleDbException (0x80004005): "C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\~\App_Data\DBUsers.mdb" non e' un percorso valido. Assicurarsi che il nome del percorso sia corretto e di essere collegati al server in cui si trova il file.



Tentativo 3

nella pagina aspx


Dim Stringadiconnessione As String
        
        Stringadiconnessione = Replace(System.Configuration.ConfigurationManager.AppSettings("AccessConn"), "~", Request.ApplicationPath.ToString())


Response.Write(System.Configuration.ConfigurationManager.AppSettings("AccessConn").ToString)


Restituisce

/webproject



Response.Write(Stringadiconnessione)



Restituisce

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=/webproject/App_Data/DBUsers.mdb;


Quindi, in teoria, e' tutto giusto ma ottengo comunque un'eccezione:


System.Data.OleDb.OleDbException (0x80004005): "C:\webproject\App_Data\DBUsers.mdb" non e' un percorso valido. Assicurarsi che il nome del percorso sia corretto e di essere collegati al server in cui si trova il file.




Come mai pesca sempre e comunque "C"?

Caricando tutto su un server reale e non su localhost (anche se in realta' si tratta del serve dell'azienda per cui lavoro, quindi sempre una cartella, infatti, usando il percorso assoluto devo fare riferimento al disco "E")


Come posso fare ad impostare un percorso relativo che posso usare in fase di progettazione (il mio disco "D") e poi caricare sul serve dell'azienda (il disco "E") e far sì che funzioni?

Grazie per l'aiuto
75 messaggi dal 24 agosto 2006
"ubimaior" <ubimaior> ha scritto nel messaggio news:389855@...
Ciao,
sto cercando di fare in modo che il progetto che ho creato funzioni a prescindere dal sito o cartella in cui si trova.

Ciao.
Tutte le risorse del tuo sito devono stare al'interno della cartella che lo contiene, ovvero la root del sito. Tale root è, appunto, rappresentata a runtime dal simbolo tilde. Se tenti di forzare tale vincolo ottieni l'errore che hai segnalato.
La stringa di connessione che hai scritto nel file di configurazione è corretta.
~/App_Data/ significa, appunto, cartella App_Data contenuta nella root del sito. Puoi mettere e chiamare tale cartella come ti va ma deve stare dentro la root. Ricorda solo di assegnare permessi di accesso, lettura e scrittura al gruppo IIS_USR del tuto server ( o chi altro credi sia opportuno in base alle tue policy di sicurezza.
Tutto questo è dovuto al fatto che usi un file database tipo access (Non cambierebbe se usassi SQL CE).
Per superare tale restrizione dovresti usare un motore DB (tipo SQL Server, Oracle, MySQL)

Buon lavoro

Pino Saffioti

Per questioni di comodita' ho la cartella che contiene il progetto nel disco D del mio pc.
Quando provo l'applicazione sul browser, quindi sul server virtuale (localhost), la stringa di connessione (a prescindere da come la scrivo) punta al disco C anche se questa lettera non e' presente nel percorso. Ecco alcune prove fatte in questi giorni.
in Web.Config:
<add key="AccessConn" value="Provider=Microsoft.Jet.OLEDB.4.0 ata Source=~/App_Data/DBUsers.mdb;"/>
Tentativo1
Nel file aspx cerco di sostituire la tilde con il path della pagina con il codice seguente
Dim Connessione As New
OleDbConnection(Replace(System.Configuration.ConfigurationManager.AppSett ings("AccessConn"), "~", Request.ApplicationPath.ToString())) Ottengo la seguente eccezione:
System.Data.OleDb.OleDbException (0x80004005):
"C:\webproject\App_Data\DBUsers.mdb" non e' un percorso valido. Assicurarsi
che il nome del percorso sia corretto e di essere collegati al server in cui si trova il file.
*Tentativo 2*
nel file aspx:
Dim Connessione As New
OleDbConnection(System.Configuration.ConfigurationManager.AppSettings(" AccessConn"))
Eccezione:
System.Data.OleDb.OleDbException (0x80004005): "C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\~\App_Data\DBUsers.mdb" non e' un percorso valido. Assicurarsi che il nome del percorso sia corretto e di essere collegati al server in cui si trova il file.
*Tentativo 3*
nella pagina aspx
Dim Stringadiconnessione As String
Stringadiconnessione =
Replace(System.Configuration.ConfigurationManager.AppSettings("AccessConn"), "~", Request.ApplicationPath.ToString())
Response.Write(System.Configuration.ConfigurationManager.AppSettings(" AccessConn").ToString)
Restituisce
/webproject
Response.Write(Stringadiconnessione)
Restituisce
Provider=Microsoft.Jet.OLEDB.4.0 ata
Source=/webproject/App_Data/DBUsers.mdb;
Quindi, in teoria, e' tutto giusto ma ottengo comunque un'eccezione: System.Data.OleDb.OleDbException (0x80004005):
"C:\webproject\App_Data\DBUsers.mdb" non e' un percorso valido. Assicurarsi
che il nome del percorso sia corretto e di essere collegati al server in cui si trova il file.
Come mai pesca sempre e comunque "C"?
Caricando tutto su un server reale e non su localhost (anche se in realta' si tratta del serve dell'azienda per cui lavoro, quindi sempre una cartella, infatti, usando il percorso assoluto devo fare riferimento al disco "E")
Come posso fare ad impostare un percorso relativo che posso usare in fase di progettazione (il mio disco "D") e poi caricare sul serve dell'azienda (il disco "E") e far sì che funzioni?
Grazie per l'aiuto
8 messaggi dal 13 settembre 2008
pisa ha scritto:

Ciao.
Tutte le risorse del tuo sito devono stare al'interno della cartella che lo contiene, ovvero la root del sito. Tale root è, appunto, rappresentata a runtime dal simbolo tilde. Se tenti di forzare tale vincolo ottieni l'errore che hai segnalato.
La stringa di connessione che hai scritto nel file di configurazione è corretta.
~/App_Data/ significa, appunto, cartella App_Data contenuta nella root del sito. Puoi mettere e chiamare tale cartella come ti va ma deve stare dentro la root. Ricorda solo di assegnare permessi di accesso, lettura e scrittura al gruppo IIS_USR del tuto server ( o chi altro credi sia opportuno in base alle tue policy di sicurezza.
Tutto questo è dovuto al fatto che usi un file database tipo access (Non cambierebbe se usassi SQL CE).
Per superare tale restrizione dovresti usare un motore DB (tipo SQL Server, Oracle, MySQL)

Buon lavoro

Pino Saffioti


Grazie per la risposta Pino.

Il problema è nato proprio perché ho messo nel web.config:

<add key="AccessConn" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=~/App_Data/DBUsers.mdb;"/>


e l'ho chiamato nella pagina (che sta nella root) con:

 Dim Connessione As New OleDbConnection(System.Configuration.ConfigurationManager.AppSettings("AccessConn"))
.

L'errore che ottengo è:

System.Data.OleDb.OleDbException (0x80004005): "C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\~\App_Data\DBUsers.mdb" non è un percorso valido. Assicurarsi che il nome del percorso sia corretto e di essere collegati al server in cui si trova il file.

Ecco perché ho fatto quei tentativi.

Sono riuscito a far funzionare il tutto impostando una variabile application con il disco in global.asax
Application("Disco") = "d:"


Recuperando il path di ogni pagina:

Request.ApplicationPath.ToString()


e combinando la stringa di connessione:

Dim Connessione As New OleDbConnection(Replace(System.Configuration.ConfigurationManager.AppSettings("AccessConn"), "~", System.Web.HttpContext.Current.Application("Disco") & System.Web.HttpContext.Current.Request.ApplicationPath.ToString()))


Però così non mi piace, anche perché non so ancora in quale disco del server della mia azienda metterò il tutto.

Ovviamente il codice sarà compilato, quindi non potrò modificarlo.

Grazie

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.