Domanda

Sto riscontrando problemi nell'ottenere l'accesso a un database che risiede su un server remoto.

Ho una pagina Web ASP.NET 2.0 che sta tentando di connettersi a un database.
Si accede al database tramite una cartella virtuale (che ho impostato in IIS).
La cartella virtuale punta a una condivisione remota che contiene il database.

La cartella virtuale (nella directory principale delle app Web) punta a una condivisione su un server remoto tramite un percorso UNC:

\\databaseServerName\databaseFolder$\ 

La cartella virtuale ha le autorizzazioni 'lettura' e 'sfoglia' impostate su 'vero'.

Memorizzo la stringa di connessione nella sezione 'appSettings' di web.config:

<add key="conStrVirtual" value="Provider=Microsoft.Jet.OleDb.4.0;Data Source=http://webAppServerName/virtualFolderName/databaseName.MDB;Jet OLEDB:Database Password=dumbPassword;"/>

L'oggetto connessione viene rifiutato sulla mia pagina aspx:

Dim objConnVirtual As New OleDbConnection(ConfigurationManager.AppSettings("conStrVirtual"))

Ecco il codice che tenta di utilizzare l'oggetto connessione:

Public Sub Test()
    If objConnVirtual.State <> ConnectionState.Open Then
        objConnVirtual.Open()
    End If
    Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM TableName", objConnVirtual)
    objDR = cmd.ExecuteReader()
    If objDR.Read() Then
        response.write("Shazaam! Data shows up here")
    End If
    objDR.Close()
    objConnVirtual.Close()
End Sub

Quando eseguo il codice precedente ottengo il seguente errore (su questa riga del codice 'objConnVirtual.Open ()':
Dettagli eccezione: System.Data.OleDb.OleDbException: nome file non valido.

Ho verificato il nome del database ed è corretto (anche copiarlo / incollarlo per accertarlo)

Se inserisco la sezione "Origine dati" della stringa di connessione nella barra degli indirizzi del mio browser, riesco a vedere correttamente il contenuto della condivisione sul server remoto.

Non sono sicuro che si tratti di un problema con le autorizzazioni o con il codice.
Ho cercato su Google di tutto questo ma non sono riuscito a trovare una soluzione.

Qualsiasi aiuto è molto apprezzato.

È stato utile?

Soluzione 5

AGGIORNAMENTO

Innanzitutto, grazie a tutti coloro che hanno inviato le risposte.

Tuttavia, abbiamo finito per non utilizzare il metodo "connessione al database remoto tramite cartella virtuale" perché la complessità delle autorizzazioni necessarie per far funzionare tutto ciò ci stava causando più problemi di quanti ne valesse la pena. Abbiamo reinserito il percorso UNC nella stringa di connessione, che potrebbe non essere il modo migliore per farlo, ma sta funzionando per noi.

Altri suggerimenti

Quando si accede a un database MDB di accesso remoto, è necessario specificare un percorso UNC come \\ remoteMachine \ Share \ test.mdb.

Assicurarsi che l'identità del pool di applicazioni disponga delle autorizzazioni giuste per connettersi alla condivisione remota. Per impostazione predefinita su IIS 6 si utilizza l'account del servizio di rete, che per impostazione predefinita non è autorizzato ad accedere a una condivisione remota.

Il modo migliore è far funzionare AppPool con un utente del servizio dedicato.

Qual è l'account utilizzato sul server quando l'app Web tenta di leggere il file db? Qualunque sia questo account utente, deve disporre delle autorizzazioni per leggere quella cartella / file. In IIS6 è possibile configurare la cartella virtuale per utilizzare qualsiasi account utente ... nella scheda Protezione directory è presente un pulsante Modifica in Autenticazione e controllo dell'accesso.

Sembra probabile che il tuo messaggio di errore sia solo un messaggio di errore generico e che il problema delle autorizzazioni sia il tuo vero problema.

assicurati che i due server abbiano accesso interno l'uno all'altro e specifica anche l'ip & amp; porta del server db nella stringa di connessione.

Aggiorna

Devo anche menzionare che funziona sulla mia macchina ( ma non una volta caricato nella casella di produzione) se dichiaro la stringa di connessione nella sezione 'appSettings' del web.config in questo modo:

<add key="conStrVirtual" value="Provider=Microsoft.Jet.OleDb.4.0;Data Source=\\databaseServerName\databaseFolder$\databaseName.MDB;Jet OLEDB:Database Password=dumbPassword;"/>

Questo mi porta a pensare che potrebbe essere un problema con la necessità di utilizzare credenziali di dominio diverse dall'account IUSER locale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top