» »

ASP.NET pisanje datoteke

ASP.NET pisanje datoteke

King80 ::

Pozdravljeni,

že nekaj časa se ubadam z problemom, kako zapisati neko datoteko v neki shared folder ki je na drugem računalniku. Aplikacija naredi poizvedbo nad neko bazo in potem hočem odložiti te rezultate poizvedbe v csv datoteko na nekem strežniku. Ročno to naredim brez problemov, ko pa hočem da tale webaplikacija pa nekako javlja da nima pravic. Potem sem se igral z impersonate="true" pa tudi nič bolje. Je kdo imel podobno težavo ?
Hvala

AndrejS ::

Probaj s tem :
Prvo mapiraš en drive, potem pa ga odmapiraš


Private Function mapDrive(ByVal folder As String, ByVal driveLetter As Char, Optional ByVal disconnect As Boolean = False) As Boolean

Dim loProcess As Process
Dim loProcessStartInfo As ProcessStartInfo

Dim liProcessTimeOutMilliseconds As Integer = 10000 'cas v katerem se mora proces koncati (10s)
Dim lsOutput As String
Dim lsError As String

' inicializaicja
lsOutput = String.Empty
lsError = String.Empty

Dim strShare As String
If disconnect Then
strShare = " use " & driveLetter & ": /delete "
Else
strShare = " use " & driveLetter & ": " & Config.networkPath & folder & " " & Config.networkPassword & " /user:" + Config.networkUsername
End If

loProcessStartInfo = New ProcessStartInfo("net", strShare)

loProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden
loProcessStartInfo.CreateNoWindow = True
loProcessStartInfo.UseShellExecute = False
loProcessStartInfo.RedirectStandardInput = True
loProcessStartInfo.RedirectStandardOutput = True
loProcessStartInfo.RedirectStandardError = True

'zaženemo process
loProcess = Process.Start(loProcessStartInfo)
If (loProcess.WaitForExit(liProcessTimeOutMilliseconds)) Then

'process se je zakljuèil normalno
lsOutput = loProcess.StandardOutput.ReadToEnd()
lsError = loProcess.StandardError.ReadToEnd()
If Not lsOutput.Equals(String.Empty) Then cLog.AddToLog(lsOutput.Trim())
If lsError.Equals(String.Empty) Then Return True
cLog.AddToLog(lsError.Trim())
Return False
Else

' proces se je obesil
' ga ustavimo
lsOutput = String.Empty
cLog.AddToLog("Map Net Drive timed out after " & liProcessTimeOutMilliseconds.ToString() & " milliseconds")

loProcess.Kill()
Return False

End If
End Function

BlueRunner ::

Če sta spletni in datotečni strežnik v domeni, potem preveri:
- da deluje AppPool te aplikacije v kontekstu NetworkService.
- da ima up. ime spletnega strežnika (RACUNALNIK$) ustrezne pravice na deljenem imeniku.

Če nimaš AD okolja, potem preveri:
- da na obeh strežnikih obstaja isto uporabniško ime z istim geslom.
- da deluje AppPool te aplikacije v kontekstu tega uporabniškega imena.
- da ima uporabniško ime ustrezne parvice na deljenem imeniku.

Če želiš uporabljati identity impersonation, zgoraj nadomesti nastavitev AppPool z nastavitvijo v web.config. Pravice morajo biti še vedno enako usklajene.

Če želiš uporabljati identity impersonation, pri čemer uporabljaš avtentikacijo uporabnika, ki se je prijavil v spletno aplikacijo, potem morajo imeti vsi potencialni uporabniki ustrezne pravice na deljenem imeniku, kakor da bi sami dostopali neposredno do njega.

King80 ::

Če sta spletni in datotečni strežnik v domeni, potem preveri:
- da deluje AppPool te aplikacije v kontekstu NetworkService.
- da ima up. ime spletnega strežnika (RACUNALNIK$) ustrezne pravice na deljenem imeniku.


To se verjetno nastavlja v IISu, jaz imam IIS 6.0 in nikakor ne najdem AppPool.
Hehehe nardim aplikacijo ki dela zlaga podatke iz večih baz pa še vmes neke izračune delam, pol pa ne morem ene posrane datoteke shranit v en folder....

BlueRunner ::

Tc, tc, tc: spet nekdo, ki dela s sistemom, pa ne pozna niti osnov... Čim prej se začni učiti, preden bo prepozno zate in za tvoje stranke.

V lastnostih spletne aplikacije na zavihku "Home Directory" poglej na dnu kater Application Pool aplikacija uporablja. Potem tega poiščeš v drevesu pod "Application Pools". V njegovih lastnostih greš na zavihek "Identity" in tam nastaviš, kar želiš nastaviti.

Pa čim prej začni z učenjem.

King80 ::

To kar delam se uporablja samo znotraj firme, ker nekateri rabijo podatke iz baze enkrat mesečno in se mi neda kar naprej isti sql poganjat in izvažat v excel, tako si lahko sami pokljukajo po katerih parametrih želijo imeti podatke in za katero obdobje.
Uglavnem problem sem rešil tako da sploh ne zapisujem podatke v shared folder ampak preprosto, to datoteko shranim lokalno in jo kot attachment pošljem na email naslov ki ga dobim iz AD ko se uporabnik prijavi v aplikacijo. Ni mi jasno kako to da je lažje eno pokakano datoteko poslat preko maila kot pa shranit na en shared folder.

P.S.: Tistega Application Poola nisem najdel, verjetno je ta opcija mogoča v Windows Server 2003, na XP pa ne.
Vseeno hvala za trud

BlueRunner ::

Uh. Dajva raje nehat...

1) Nikjer nisi imel napisano Windows XP, zato sem sklepal, da za strežnik uporabljaš, kako bi rekel, "strežnik" (Windows Server). Windows XP imajo IIS 5.1 in ne 6, kot si narobe napisal posledično pa tudi celo vrsto omejitev pri uporabo .NET okolja. No ja, drugič bom vsaj vedel vprašati tudi takšna osnovna vprašanja.

2) To, da ti ni jasno kako v splošnem delujejo pravice v Windows NT, AD in CIFS omrežju, pa je tvoj problem. Kot sem že napisal: vzemi kakšno knjigo v roke, če misliš takšne stvari početi še naprej. Če boš delal na slepo, boš imel pač več možnosti, da ga zelo dobro pobiksaš.

3) Glede na opis problema: ali si kdaj pomislil, da bi Excel sam zajel podatke iz podatkovne baze? Ali pa je to v tem podjetju vprašanje pisarniško polpismenih ali celo nepismenih uporabnikov, ki mislijo, da obvladajo Excel, ker znajo slepo klikati gumbe v orodni vrstici? Excel je skozi leta prerasel iz navadne preglednice v močno aplikacijo, ki omogoča enostaven zajem in veliko možnosti manipuliacije podatkov iz zunanjih virov. Je pa res, da je potrebno za obvladovanje takšne moči obiskati tudi kakšen tečaj.

King80 ::

Moja služba je analitika podatkov... se pravi dobim razne zahteve da rabijo take in take podatke, baze imamo v oraclu in veselo klofam sqlje. Zdaj sem se odločil da tiste zahteve ki se mesečno ponavljajo spravim v neko web-aplikacijo in naj si sami uporabniki naredijo poizvedbe. Res je, pojma nimam o pravicah v NT, CS, MD, AD sistemih, vem samo kako dodeljevat pravice oraclovih bazah in pisat poizvedbe. Tisti gravž od Oracle Form Builder nočem več videt in zato sem se odločil da bom maske od zdaj naprej razvijal v ASP.NETu

BlueRunner ::

Če ostaneva pri konkretnem primeru: ali bi bilo smiselno, da bi uporabniki sami, po potrebi, zajemali potrebne podatke neposredno iz PB? Če je to možno, potem se ti izplača uporabiti kar Excel sam. Podatke dobiš iz Oracle DB, analitiko delaš pa kar v njemu neposredno. Odpade vse odvečno pepisovanje in pošiljanje, ki služi predvsem temu, da te podatke dostavi do aplikacije.

Morebitni zadržki (kot se jih na hitro spomnem) pri takšnem prostpu pa so:
- zahtevnost poizvedbe: namesto ene poizvedbe bo morala PB odgovoriti na N pomnilniško in/ali procesorsko zahtevnih poizvedb.
- dostopnost PB: ali je PB vedno dostopna analitikom, ki analizirajo te podatke?

Da pa ne bova prehitro oddivjala: katero verzijo MSO uporabljate v podjetju?

King80 ::

Z Toadom se konektam na Oraclovo bazo pa potem veselo klofam poizvedbe. Uglavnem Ko dobim željene rezultate rečem Resultsetu:Export to Excel in potem ta excel pošljem uporabniku, ki potem naprej riše grafe, izračunava povprečje meseca, pač tisto kar rabi. Samih oraclovih orodij se kolikor da izogibam ker so grda in okorna.
V podjetju imamo MSO 2003...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Program za set back time (RUN AS DATE)

Oddelek: Programska oprema
374869 (4493) Yacked2
»

C# in servisi

Oddelek: Programiranje
71104 (664) mihies
»

c# tiho tiskanje slik.

Oddelek: Programiranje
101947 (1618) OmegaM
»

Poganjanje zunanjih aplikacij iz C#

Oddelek: Programiranje
71012 (843) BlueRunner
»

Odpiranje dat.exe v VB

Oddelek: Programiranje
123006 (2799) webblod

Več podobnih tem