07. august 2006 - 15:39Der er
32 kommentarer og 1 løsning
Conn. streng til Excel på netværk fra webserver
Vi har i firmaet et netværk og på dette netværk ligger der en Excelfil, som jeg gerne vil lave en connection til, fx. z:\MyExcel.xls (servernavnet er fx. server1). Min applikation ligger på en webserver.
Hvis jeg kører på min lokale maskine og har en Excelfil liggende her: c:\MyExcel.xls, kan jeg bruge følgende connection streng:
Dim ConnExcel As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""")
Hvis jeg nu flytter min applikation op på webserveren, kunne man forestille sig, at man kunne bruge denne:
Dim ConnExcel As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Z:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""")
men filen kan så ikke findes.
Hvis jeg i IE skriver:
\\server1\Z\MyExcel.xls kan Excelfilen godt findes.
snepnet -> Hm - så skriver den: Access to the path "C:\WINNT\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\webhotel_enzyme_ebqm_qcc_test-kimn_scorecard\9b1ef8c6\8a386b36\hash.web" is denied.
thrytter -> Desværre ikke, da en anden applikation vedligeholder data i Excelarket i netop dette bibliotek, så det er ikke lige til at ændre.
Jeg får kun denne fejl, når jeg kører på webserveren. Kører jeg lokalt, vil den bare ikke oprette forbindelse. Så jeg skal vel bede den webserveransvarlige om at stoppe denne Indexing Service?
Jeg sidder lige og nærlæser fejlbeskeden og den siger med småt:
ASP.NET is not authorized to access the requested resource. Consider granting access rights to the resource to the ASP.NET request identity. ASP.NET has a base process identity (typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6) that is used if the application is not impersonating. If the application is impersonating via <identity impersonate="true"/>, the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user.
Access to the path "C:\WINNT\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\webhotel_enzyme_ebqm_qcc_test-kimn_scorecard\9b1ef8c6\8a386b36\hash.web" is denied.
så er den slet ikke mulig på min maskine - den hedder:
C:\Windows\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files
Umiddelbart er det lidt underligt med det andet navn?!? Prøv at sende de nævnte rettigheder på den folder du har og se hvad der sker. De har bokset med det også på den side jeg linkede til oprindeligt. Mvh
Det er samme budskab som i tidligere link (08/08-2006 13:53:21), som han også henviser til fra dit link (det er i hvert fald det det ender med). Der giver de dog bare users lov til at skrive i folderen. Men hva' - jeg kan ikke se noget i vejen for at admin skulle eje en folder på maskinen :o) Mvh
Nu har de gjort som der stod i linket og nu er den giftige hash.web fejl forsvundet! Når jeg nu forsøger at oprette forbindelse går den i fejl og Err.Description siger så:
Z:\MyExcel.xls is not a valid path. Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.
så nu må det vel være selve syntaksen, det er galt med. Kan man forestille sig, at forbindelsesstrengen skal indeholde servernavnet på en eller anden måde?
Uha - det ser godt nok indviklet ud!! Så vidt jeg kan se, skal jeg konvertere det almindelige drevbogstav til en absolut UNC sti og denne kan så formodentlig bruges i forbindelsesstrengen. Kan du mon lede mig lidt på vej? Jeg har lagt en Excelfil her: X:\share\A\MyExcel.xls, hvor X: er et netværksdrev. Hvad vil jeg konkret skulle skrive for at få en UNC sti?
Nu har jeg fået et lille program, der direkte putter UNC stien op i klippebordet:
\\server\z\....
og jeg har prøvet både med servernavnet og serverens IP adresse, men jeg får stadig fejl.
Jeg har prøvet at lægge en Accessfil på samme sted som Excelfilen og åbne med en rettet connectionstring og her får jeg fejlen:
The Microsoft Jet database engine cannot open the file '\\server\z\......\db.mdb'. It is already opened exclusively by another user, or you need permission to view its data.
Databasen er ikke åben (jeg kan åbne den på netværket med stifinder uden problemer) og de siger, at adgangen til filen er ok. Hvis jeg lægger Accessdatabasen på min lokale pc med samme forbindelse, åbnes uden problemer.
Jeg har også prøvet at lægge Accessdatabasen på samme webserver som .aspx'en og så åbnes uden problemer?
Jeg prøvede at lave en File.Copy, men heller ikke her kunne filen findes, men ved søgning på nettet, fandt jeg følgende: http://www.codecomments.com/archive289-2004-5-205292.html og det beskriver nøjagtigt det fænomen, jeg er ude for. Af svaret fremgår: to copy to another server you need to impersonate a primary token, not an impersonation. Desværre er der ikke mere end det.
Videre søgning sendte mig til denne: http://en.wikipedia.org/wiki/Token_(Windows_NT_architecture)#How_a_token_is_used_in_access_control, men anvendelsen er desværre ikke udfyldt endnu.
snepnet -> Ved du, hvordan man skal bruge dette i praksis?
Nej - jeg er i tvil om, hvor man kører koden? Kan man blot sætte den ind lige før forbindelsen skal oprettes - altså under DoSomeWorkWhileImpersonating();?
Nu virker dit råd fra 07/08-2006 15:57:19 - jeg får ikke mere den 'hash' besked?! Det er den samme .aspx fil, så jeg ved ikke rigtigt, hvad der gik galt i første omgang, men nu kan den!!! Herligt!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.