Access network share from ASP.NET

  • Thread starter Thread starter Yuriy Galanter
  • Start date Start date
Y

Yuriy Galanter

Hi all,

I need to access a file on a network share from an ASP.NET application
(using methods like file.readalltext). Of course ASP.NET doesn't have access
to that share. But I do have both UserID and password of a user who does
have access. How do I use them to supply credentials for file.readalltext
method (similar how I can do that for WebClient with NetworkCredentials)?

Thanks!

Yuriy.
 
Quickest way is impersonation with asp.net.

Inside of

<system.web>


<authentication mode="Windows" />
<identity impersonate="true" userName="mycompany\myname" password="mypwd"
/>

</system.web>


That should give you something to search on.
 
Here you go....Exactly what you want without using impersonation.

#region WIN API Declarations

//used in calling WNetAddConnection2

[StructLayout(LayoutKind.Sequential)]

public struct NETRESOURCE

{

public int dwScope;

public int dwType;

public int dwDisplayType;

public int dwUsage;

[MarshalAs(UnmanagedType.LPStr)]

public string lpLocalName;

[MarshalAs(UnmanagedType.LPStr)]

public string lpRemoteName;

[MarshalAs(UnmanagedType.LPStr)]

public string lpComment;

[MarshalAs(UnmanagedType.LPStr)]

public string lpProvider;

}

//WIN32API - WNetAddConnection2

[DllImport("mpr.dll",

CharSet = System.Runtime.InteropServices.CharSet.Auto)]

private static extern int WNetAddConnection2A(

[MarshalAs(UnmanagedType.LPArray)] NETRESOURCE[] lpNetResource,

[MarshalAs(UnmanagedType.LPStr)] string lpPassword,

[MarshalAs(UnmanagedType.LPStr)] string lpUserName,

int dwFlags);

[DllImport("mpr.dll",

CharSet = System.Runtime.InteropServices.CharSet.Auto)]

private static extern int WNetCancelConnection2A(

[MarshalAs(UnmanagedType.LPStr)] string lpName,

int dwFlags, int fForce);

#endregion

private byte[] GetFSMSFile(string sFile)

{

NETRESOURCE[] nr = new NETRESOURCE[1];

nr[0].lpRemoteName = _sFSMSShare;

nr[0].lpLocalName = ""; //mLocalName;

nr[0].dwType = 1; //disk

nr[0].dwDisplayType = 0;

nr[0].dwScope = 0;

nr[0].dwUsage = 0;

nr[0].lpComment = "";

nr[0].lpProvider = "";

int iErr = WNetAddConnection2A(nr, _sFSMSShareUserPassword, _sFSMSShareUser,
0);

if (iErr > 0)

throw new Exception("Can not connect to FSMS share folder");

FileStream st = null;

try

{

st = new FileStream(_sFSMSShare + "\\" + sFile, FileMode.Open);

int iLen = (int)st.Length;

byte []b = new byte[iLen];

st.Read(b, 0, iLen);

return b;

}

finally

{

if( st != null )

st.Close();

WNetCancelConnection2A(_sFSMSShare, 0, -1);

}

}
 
Thanks guys, you pointed me in the right direction and I got it working.
Great group!

Yuriy.
 
Yuriy Galanteræ–¼ 2008å¹´3月12日星期三UTC+8下åˆ8時27分29秒寫é“:
Thanks guys, you pointed me in the right direction and I got it working.
Great group!

Yuriy.

I have the same problem, but I did not get it work. Would u mind give me a complete example?
 
Back
Top