Sveiki gyvi
Yra tokia situacija: yra vienas serveris su MS Windows Server 2008 R2
Enterprise Edition ir SQL Server 2008 R2 Expres Edition su įjungtu
FileStream'u(Full access enabled). Yra kitas serveris su Windows Server 2003
Standart Edition ir IIS 6.0 su 4 Framework'u. Abu serveriai yra tame pačiame
domene.
Bandant iš antro serverio pasiekti filestream'ą, gaunu klaidą:
System.ComponentModel.Win32Exception (0x80004005): Access is denied at
System.Data.SqlTypes.SqlFileStream.OpenSqlFileStream(String path, Byte[]
transactionContext, FileAccess access, FileOptions options, Int64
allocationSize) at System.Data.SqlTypes.SqlFileStream..ctor(String path,
Byte[] transactionContext, FileAccess access, FileOptions options, Int64
allocationSize) at System.Data.SqlTypes.SqlFileStream..ctor(String path,
Byte[] transactionContext, FileAccess access) at isakymas.Page_Load(Object
sender, EventArgs e) in C:\Inetpub\www\failas.aspx.vb:line 39
Kaip traukiu filestreame'ą:
sql = "select failas.PathName() as kelias, failo_vardas from vw_failai where
failai_id = '" + id + "'"
If con.State = ConnectionState.Closed Then
con.Open()
End If
Dim sql_tran As SqlTransaction = con.BeginTransaction
Dim cmd As New SqlCommand(sql, con, sql_tran)
Dim dr As SqlDataReader
Try
dr = cmd.ExecuteReader
If dr.HasRows Then
dr.Read()
Dim kelias As String = dr("kelias").ToString
Dim failo_vardas As String = dr("failo_vardas").ToString
dr.Close()
sql = "SELECT GET_FILESTREAM_TRANSACTION_CONTEXT()"
cmd = New SqlCommand(sql, con, sql_tran)
Dim sqlcontext As Byte() = CType(cmd.ExecuteScalar,
Byte())
Dim filestream As SqlFileStream = New
SqlFileStream(kelias, sqlcontext, IO.FileAccess.Read) '39 eilute - cia
įvyksta klaida
Dim buffer As Byte() = New
Byte(CInt(filestream.Length) - 1) {}
filestream.Read(buffer, 0, filestream.Length)
filestream.Close()
sql_tran.Dispose()
Response.AddHeader("Content-disposition", "attachment;
filename=" + failo_vardas)
Response.ContentType = "application/octet-stream"
Response.BinaryWrite(buffer)
End If
If Not dr.IsClosed Then
dr.Close()
End If
Catch ex As Exception
Response.Write("<p>" + ex.ToString + "</p>")
If Not dr.IsClosed Then
dr.Close()
End If
sql_tran.Dispose()
End Try
con.Close()
connection string:
connectionString="Data Source=W2008_WWW;Initial Catalog=failai_db;Integrated
Security=SSPI"
web.config:
<authentication mode="Windows"></authentication>
<authorization>
<deny users="?"/>
</authorization>
<identity impersonate="true"/>
Viskas tas pats paleistas pirmąjame serveryje (t.y. lokaliai) veikia be
jokių klaidų.
Kur ieškot sliekų?
Mindaugas