tags:

views:

22

answers:

3

Why might my GetRawData declared function return a correct value when called from my VB.NET application, but return zero when called from my ASP.NET page?

The code is exactly the same except for class type difference (Form / Page) and calling event handler (Form1_Load, Page_Load).

Note: In the actual code, #DLL# and #RAWDATAFILE# are both absolute filenames to my DLL and raw data file respectively.

Note: The DLL file was not created by Visual Studio.

Form1.vb

Public Class Form1

    Declare Auto Function GetRawData Lib "#DLL#" (ByVal filename() As Byte, _
                                                  ByVal byteArray() As Byte, _
                                                  ByVal length As Int32) As Int32


    Private Sub Form1_Load(ByVal sender As System.Object, _
                           ByVal e As System.EventArgs) Handles MyBase.Load

        Dim buffer(10485760) As Byte
        Dim msg As String, length As Integer = 10485760
        Dim filename As String = "#RAWDATAFILE#"
        length = GetRawData(Encoding.Default.GetBytes(filename), buffer, length)

Default.aspx.vb

Partial Public Class _Default
    Inherits System.Web.UI.Page

    Declare Auto Function GetRawData Lib "#DLL#" (ByVal filename() As Byte, _
                                                  ByVal byteArray() As Byte, _
                                                  ByVal length As Int32) As Int32


    Protected Sub Page_Load(ByVal sender As Object, _
                            ByVal e As System.EventArgs) Handles Me.Load

        Dim buffer(10485760) As Byte
        Dim msg As String, length As Integer = 10485760
        Dim filename As String = "#RAWDATAFILE#"
        length = GetRawData(Encoding.Default.GetBytes(filename), buffer, length)
+1  A: 

A slightly less then random guess: the ASP.NET process doesn't have permission to open the the file specified by "#RAWDATAFILE#"

Michael Burr
+1  A: 

This DLL function appears to take a file name and return some data from the file into a buffer. You don't specify the full path to the file, "#rawdatafile#" would be a relative path. The odds that this works in an asp.net page are very small. Specify a full path instead (like "c:\blah\something.txt" instead of "something.txt").

Lots of other possible failure modes. Like the DLL path and whether the asp.net account has the necessary rights to access these files.

Hans Passant
+1  A: 

Try putting your dll and file in your ASP.Net bin directory and referencing it from there. The DLL may be silently failing because of security issues.

chibacity
I put the dll in my bin folder and it still failed. However, I checked "NTLM Authentication" in my Project Properties (Web tab), and it worked.
Steven