Pergunta

Eu estou tendo um problema obtendo acesso a um banco de dados que vive em um servidor remoto.

Eu tenho uma página da Web ASP.NET 2.0 que está tentando se conectar a um banco de dados.
O banco de dados é acessado através de uma pasta virtual (que eu criado em IIS).
A pasta virtual aponta para um compartilhamento remoto que contém o banco de dados.

A pasta virtual (na web aplicativos diretório raiz) está apontando para um compartilhamento em um servidor remoto através de um caminho UNC:

\\databaseServerName\databaseFolder$\ 

A pasta virtual tem 'ler' e 'Procurar' permissões definido como 'true'.

Eu armazenar a string de conexão na seção do web.config dos appSettings ':

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

O objeto de conexão é declard na minha página aspx:

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

Aqui está o código que tenta usar o objeto de conexão:

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 eu executar o código acima eu recebo o seguinte erro (nessa linha do código 'objConnVirtual.Open ()':
Exceção detalhes: System.Data.OleDb.OleDbException:. Não é um nome de arquivo válido

Eu verifiquei o nome do banco e é correto (até copiar / colar para se certificar)

Se eu colocar seção da seqüência de conexão o 'Fonte de Dados' na barra de endereços do meu navegador eu posso ver com sucesso o conteúdo do compartilhamento no servidor remoto.

Não sei se isso é um problema com permissões ou com o código.
Eu pesquisei o crap fora deste, mas não foram capazes de encontrar uma solução.

Qualquer ajuda é muito apreciada.

Foi útil?

Solução 5

Atualizar

Primeiro, obrigado a todos que enviaram respostas.

No entanto, acabamos não usando o 'ligar a base de dados remota via virtual pasta' método, porque a complexidade das permissões necessárias para chegar a este trabalho foi levando-nos mais problemas do que valia. Colocamos o caminho de volta UNC na cadeia de conexão, o que pode não ser a melhor maneira de fazer isso, mas está trabalhando para nós.

Outras dicas

Ao acessar um banco de dados Access MDB remoto, você tem que especificar um caminho UNC como \\ remoteMachine \ Share \ test.mdb.

Certifique-se a sua identidade pool de aplicativos tem as permissões corretas para se conectar ao compartilhamento remoto. Por padrão no IIS 6 que está a trabalhar com a conta de serviço de rede, que é por padrão não é permitido o acesso de um compartilhamento remoto.

A melhor maneira é deixar o prazo AppPool com um utilizador de serviços dedicado.

O que é a conta que está sendo usado no seu servidor quando o seu aplicativo web tenta ler o arquivo db? O que quer que esta conta de utilizador é, ele precisa ter permissões para ler essa pasta / arquivo. Em IIS6 você pode configurar a pasta virtual para usar qualquer conta de usuário ... na guia Segurança de diretório, há um botão Editar em autenticação e controle de acesso.

Parece provável que a sua mensagem de erro é apenas uma mensagem de erro genérico, eo problema de permissões é o problema real.

Certifique-se os dois servidores têm acesso interno entre si e também especificar o ip & porto de servidor db na cadeia de ligação.

Atualizar

Gostaria também de mencionar que funciona na minha máquina ( mas não uma vez carregado até a caixa de produção) se eu declarar a seqüência de conexão na seção do web.config como esta dos appSettings ':

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

Isso me leva a pensar que poderia ser um problema com a necessidade de outros que não a conta IUSER locais credenciais de domínio uso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top