Search code examples
asp.netvb.netvisual-studio-2010pdfintranet

Streaming PDF works on Localhost but not on published Website


I'm currently trying to open a PDF file on my website that is located on my company's network. I had this working previously, but now for some reason it isn't working. Here is what I have:

I am using impersonation to access the file. It has domain admin privileges. This is from my web.config file (username/password are altered):

<identity impersonate="true" password="pass" userName="domain\user" />

I use this code to open the PDF in a window:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Try
        Dim strPath As String = CStr(Session("DWGPath"))
        strPath = "file://san01/prodeng/" + Mid(strPath, 4)
        strPath = Replace(strPath, "\", "/")

        Dim pdfPath As String = strPath
        Dim client As WebClient = New WebClient()
        Dim buffer As Byte() = client.DownloadData(pdfPath)
        Response.ContentType = "application/pdf"
        Response.AddHeader("content-length", buffer.Length.ToString())
        Response.BinaryWrite(buffer)
        Response.End()
    Catch exa As WebException
        Response.Redirect("DrawingError.aspx")
    Catch ex As Exception
        Throw ex
    End Try
End Sub

This doesn't work. It redirects me to the "DrawingError.aspx" page. This link dispalys the "Session("DWGPath")" variable. I can take this variable and paste it in to my browser and the PDF opens without problem.

However, if I alter my code to this:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Try
        Dim strPath As String = CStr(Session("DWGPath"))

        Dim pdfPath As String = strPath
        Dim client As WebClient = New WebClient()
        Dim buffer As Byte() = client.DownloadData(pdfPath)
        Response.ContentType = "application/pdf"
        Response.AddHeader("content-length", buffer.Length.ToString())
        Response.BinaryWrite(buffer)
        Response.End()
    Catch exa As WebException
        Response.Redirect("DrawingError.aspx")
    Catch ex As Exception
        Throw ex
    End Try
End Sub

It still doesn't work.

The account also has full control privileges to the folder that contains the PDFs.

Any help or insight would be appreciated. Thank you!

EDIT: IF I throw exa then I get this:

The account used is a computer account. Use your global user account or local user account to access this server.

Solution

  • I assume you're running IIS. Go to the application pool for this app and change the identity that it's running under to be the domain\user account. See if that fixes your problem.

    You want to make sure that the password on this account doesn't change or else it will fail when the password expires.