28. juni 2005 - 10:59Der er
17 kommentarer og 2 løsninger
Tilgå et netværks drev
Hej
Jeg vil tilgå et netværks drev fra min asp.net applikation, hvis jeg ikke bruger impersonation får jeg fejlen : "Logon failure: unknown user name or bad password.\r\n" .
Derimod når jeg gør brug af impersonation, får jeg denne fejl: "Could not find file \"\\\\servernavn\\brugerdata\\test.txt\"."
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Først skal du sikre dig hvilke rettigheder der kræves for at tilgå serveren/filen. Hvis du har rettigheder (enten som anonym eller din windows konto) - bliver vi nok nødt til at se den kode du benytter.
Hvis du impersonater - så husk at slå anonymous login fra i IIS. Den sti du angiver - har du prøvet med blot "\\servernavn\brugerdata\test.txt"
Dim sFilename As String = ("//profilen/common/Udvikling/test/test.txt") Dim msg As String msg &= Now() & vbCrLf msg &= "test test"
Dim sw As New IO.StreamWriter(sFilename, True) sw.WriteLine(msg) sw.Flush() sw.Close()
i Web.config <authentication mode="Windows" /> <identity impersonate="true" />
i opsætning for IIS vælg dit web-projekt vælg egenskaber Vælg mappesikkerhed Rediger styring af anonym adgang og godkendelse Fjern anonym adgang fluebenet
System.IO.Stream iStream = null; //Buffer to read 10kb as a chunk byte[] buffer = new Byte[10000]; //legth of the file int length; //Total bytes to read long dataToRead; //Now the filename //string fileName = theFile.Name; string filename = System.IO.Path.GetFileName(path);
try { //Open the file iStream = new FileStream(path,FileMode.Open,FileAccess.ReadWrite,FileShare.ReadWrite); //Bytes to read dataToRead = iStream.Length;
//Headers now Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition","attachment;filename="+filename);
while(dataToRead >0) { //IS client still connected if(Response.IsClientConnected) { //Read the data in the buffer length = iStream.Read(buffer,0,10000); //Write data to current output stream Response.OutputStream.Write(buffer,0,length);
//Flush data to html output Response.Flush(); //redefine buffer and dataToRead values buffer = new Byte[10000]; dataToRead = dataToRead - length;
} else { //If the user disconnected it, prevent infinite loop dataToRead = -1; }
Hvis ikke ASPNET-brugeren har adgang til og rettigheder til at læse på netværksdrevet, kan den heller ikke finde filen. Selvom du får meddelelsen "Could not finde file..." bør du alligevel kontrollere ASPNET-brugerens adgang og rettigheder - der kan godt ligge et andet problem under, end fejlmeddelelserne lige giver udtryk for.
prøv at give kontoen "Alle" fuld kontrol over filen - hvis det heller ikke virker angiver du ikke din path korrekt. Hvis det virker, er det noget rettighedsproblematik...
At angive stien i formatet \\\\<servernavn>\\<sti>\\<fil> virker pt. fint for mig, så det kan der ikke være noget galt med - problemet må ligge et andet sted...
Tak for ideen, det var navnet, jeg kan sagtens hente og skriv til det andet netværksdrev. Thomashove får 100 points og dsj 80.
Tak begge to.
Synes godt om
Ny brugerNybegynder
Din løsning...
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.