클라우드 서비스에서 VM의 공유 폴더로 파일 저장

4016 단어 Azure

하고 싶은 일


클라우드 서비스로 가상 머신의 공유 폴더를 불러와서 고객으로부터 업로드된 파일을 저장하고 싶습니다!!
※ Azure Files를 사용하면 공유 폴더를 쉽게 사용할 수 있습니다.
자세한 내용은 Persisting connections to Microsoft Azure Files 를 참조하십시오.

가상 네트워크 준비


다음과 같이 가상 네트워크를 준비합니다.

가상 머신 만들기


가상 머신을 만들고 공유 폴더를 설정합니다.


※ 내부 IP 주소를 미리 고정하십시오.
이번에는 10.0.0.4 고정 VM을 사용합니다.

WebRole.cs


WebRole.cs는 아래와 같다.
구성된 Z 드라이브에 파일을 저장할 응용 프로그램을 만들면 됩니다.
WebRole.cs
Using System.Runtime.InteropServices;

namespace MvcWebRole1
{
    public class WebRole : RoleEntryPoint
    {
        [DllImport("Mpr.dll",
                   EntryPoint = "WNetAddConnection2",
                   CallingConvention = CallingConvention.Winapi)]
        private static extern int WNetAddConnection2(NETRESOURCE lpNetResource,
                                                     string lpPassword,
                                                     string lpUsername,
                                                     System.UInt32 dwFlags);

        [DllImport("Mpr.dll",
                   EntryPoint = "WNetCancelConnection2",
                   CallingConvention = CallingConvention.Winapi)]
        private static extern int WNetCancelConnection2(string lpName,
                                                        System.UInt32 dwFlags,
                                                        System.Boolean fForce);

        [StructLayout(LayoutKind.Sequential)]
        private class NETRESOURCE
        {
            public int dwScope;
            public ResourceType dwType;
            public int dwDisplayType;
            public int dwUsage;
            public string lpLocalName;
            public string lpRemoteName;
            public string lpComment;
            public string lpProvider;
        };

        public enum ResourceType
        {
            RESOURCETYPE_DISK = 1,
        };

        public static void MountShare(string shareName,
                                      string driveLetterAndColon,
                                      string username,
                                      string password)
        {
            if (!String.IsNullOrEmpty(driveLetterAndColon))
            {
                // Make sure we aren't using this driveLetter for another mapping
                WNetCancelConnection2(driveLetterAndColon, 0, true);
            }

            NETRESOURCE nr = new NETRESOURCE();
            nr.dwType = ResourceType.RESOURCETYPE_DISK;
            nr.lpRemoteName = shareName;
            nr.lpLocalName = driveLetterAndColon;

            int result = WNetAddConnection2(nr, password, username, 0);

            if (result != 0)
            {
                throw new Exception("WNetAddConnection2 failed with error " + result);
            }
        }

        public override bool OnStart()
        {
            MountShare("\\10.0.0.4\my-share",
                       "z:",
                       "<ユーザー名>",
                       "<パスワード>");

            return base.OnStart();
        }
    }
}

주의사항


기술적으로는 상기 방법을 통해 가상 머신의 공유 폴더를 불러올 수 있지만 몇 가지 주의사항이 있다.
・ SLA 객체에 속하지 않는 가상 메커니즘이 반드시 필요합니다.
• 하드웨어 장애 또는 정기 유지 보수로 인해 Azure 가상 머신이 재부팅될 수 있음

좋은 웹페이지 즐겨찾기