웹서버에서 원격파일서버로 파일복사할 때 사용되는 방법
참고글
방법
1. 가장해서 전송하는 경우
web.config 에 가장(impersonate) 정보를 등록하여 사용
이 부분은 참고글을 보면 자세한 사항이 나와 있습니다.
2. 네트워크 드라이버 잡아서 하는 경우
- batch 파일로 가상디렉토리를 잡고 UNC 명으로 파일복사
batch 파일 정보
net use z: \\가상디렉토리경로\hgjung "hgjung" /user:hgjung /persistent:YES
- Win32 API에 있는 "WNetUseConnection" 를 사용하여 가상디렉토리를 잡고 UNC 명으로 파일복사
WNetUseConnection 사용방법
[code csharp]
NetworkDriveHelper.Connect("\\가상디렉토리경로\hgjung", "hgjung", "hgjung", null);
public class NetworkDriveHelper
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct NETRESOURCE
{
public uint dwScope;
public uint dwType;
public uint dwDisplayType;
public uint dwUsage;
public string lpLocalName;
public string lpRemoteName;
public string lpComment;
public string lpProvider;
}
[DllImport("mpr.dll", CharSet = CharSet.Auto)]
internal static extern int WNetUseConnection(
IntPtr hwndOwner,
[MarshalAs(UnmanagedType.Struct)] ref NETRESOURCE lpNetResource,
string lpPassword,
string lpUserID,
uint dwFlags,
StringBuilder lpAccessName,
ref int lpBufferSize,
out uint lpResult);
/// <summary>
/// 공유 폴더에 대한 네트워크 연결을 만든다.
/// 그 드라이브 이름은 StringBuilder 를 통해 값이 반환된다.
/// </summary>
/// <param name="remoteAccessUri">원격 공유폴더 경로</param>
/// <param name="remoteUserId">원격 사용자 아이디</param>
/// <param name="remotePassword">원격 비밀번호</param>
/// <param name="localDriveName">사용가능한 드라이브 명, NULL일때 시스템이 자동으로 설정한다.</param>
/// <returns>
/// 0 : 성공 (0 이 아닌 값은 오류가 발생했음을 알리는 오류 코드)
/// 85 : 네트드라이버를 설정할때, 네트워크 드라이버가 이미사용중일 때(시스템에 자동으로 생성되게 하면 localDriveName에 NULL를 입력 sb로 반환한다.)
/// 234 : capacity 값은 공유 폴더의 경로를 담을 수 있도록 충분히 주어야 한다. 그렇지 않으면 오류 코드 234를 반환할 것이다.
/// 1203 : 공유폴더경로 오류
/// 1326 : 사용자/암호가 일치 하지 않는다.
/// </returns>
static public int Connect(string remoteAccessUri, string remoteUserId, string remotePassword, string localDriveName)
{
int capacity = 64;
uint resultFlags = 0;
// flags 가 0x80 이 아닌 값이 사용되면 StringBuilder는 일반적으로 공유 폴더의 UNC 이름을 반환한다.
uint flags = 0;
System.Text.StringBuilder sb = new System.Text.StringBuilder(capacity);
NETRESOURCE ns = new NETRESOURCE();
ns.dwType = 1; // 공유 디스크
ns.lpLocalName = localDriveName; // 로컬 드라이브 지정하지 않음
ns.lpRemoteName = remoteAccessUri;
ns.lpProvider = null;
int result = WNetUseConnection(IntPtr.Zero,
ref ns,
remotePassword,
remoteUserId,
flags,
sb,
ref capacity,
out resultFlags);
return result;
}
}
[/code]
파일복사는 반드시 UNC 명으로 해야합니다. (이유는 네트워크 드라이브 정보는 각 계정의 프로필정보에 저장이 되므로 실행하는 계정의 틀리면 네트워크 드라이브로 접근할 수 가 없습니다.)
파일복사
3. IIS에 가상디렉토리 잡아서 하는 경우
웹서버와 파일서버에 동일한 계정과 비밀번호를 생성하고 IIS에 가상디렉토리를 파일서버의 공유폴더로 잡아놓고 복사하면 됩니다.
'개발관련 > ASP.NET' 카테고리의 다른 글
| 웹서버에서 원격 파일서버로 파일 복사하기 (0) | 2010/03/17 |
|---|---|
| asp.net, c# 개발팁 (0) | 2008/12/04 |
| 오 놀라운 닷넷차트 (0) | 2008/11/26 |
| 개발 중 참고사항 (0) | 2008/11/20 |
| 웹프로젝트 작업표준 (0) | 2008/10/20 |
| Refresh Module 동작중에 리소스파일을 못 불러올 경우… 해결 (0) | 2008/02/29 |



댓글을 달아 주세요