Веб-заданию Azure отказано в доступе при доступе к общему расположению - PullRequest
0 голосов
/ 22 марта 2019

У меня общая папка на виртуальной машине Azure и веб-задание в одной и той же сети Vnet на Azure.У меня есть сценарий C # развернут на webjob для доступа к общему местоположению.Когда я выполняю веб-задание для доступа к нему, я получаю сообщение об ошибке:

[22.03.2009 15:02:19> eb8046: SYS INFO] Статус изменяется на Инициализация

[22.03.2009 15:02:29> eb8046: SYS INFO] Запустите скрипт «AccessSharedLocation.exe» с хостом скрипта - «WindowsScriptHost»

[22.03.2009 15:02:29>eb8046: SYS INFO] Статус изменен на «Выполнено»

[22.03.2009 15:02:32> eb8046: ERR]

[22.03.2009 15:02:32> eb8046: ERR] Необработанное исключение: System.Net.WebException: Доступ к пути '\ 192.168.1.4 \ shared \ nilo.txt' запрещен.---> System.Net.WebException: доступ к пути '\ 192.168.1.4 \ shared \ nilo.txt' запрещен.---> System.UnauthorizedAccessException: доступ к пути '\ 192.168.1.4 \ shared \ nilo.txt' запрещен.

[22.03.2009 15:02:32> eb8046: ERR] вSystem.IO.FileStream.ValidateFileHandle (SafeFileHandle fileHandle)

[22.03.2009 15:02:32> eb8046: ERR] в System.IO.FileStream.CreateFileOpenHandle (режим FileMode, общий доступ к FileShare, параметры FileOptions)

[22.03.2009 15:02:32> eb8046: ERR] в System.IO.FileStream..ctor (путь строки, режим FileMode, доступ к FileAccess, общий доступ к FileShare, размер буфера Int32, параметры FileOptions)

[22.03.2009 15:02:32> eb8046: ERR] в System.Net.FileWebResponse..ctor (запрос FileWebRequest, Uri uri, доступ к FileAccess, логическое использование asAsync)

[22.03.2009 15:02:32> eb8046: ERR] --- Конец трассировки стека внутренней исключительной ситуации ---

[22.03.2009 15:02:32> eb8046: ERR] at System.Net.FileWebResponse..ctor (запрос FileWebRequest, Uri uri, доступ к FileAccess, логическое значение useAsync)

[22.03.2009 15:02:32> eb8046: ERR]at System.Net.FileWebRequest.CreateResponse ()

[22.03.2009 15:02:32> eb8046: ERR] --- Конец трассировки стека внутренней исключительной ситуации ---

[22.03.2009 15:02:32> eb8046: ERR] в System.Net.FileWebRequest.CreateResponse ()

[22.03.2009 15:02:32> eb8046: ERR] в системе.Net.FileWebRequest. <> C.b__59_0 (Объекты)

[22.03.2009 15:02:32> eb8046: ERR] в System.Threading.Tasks.Task`1.InnerInvoke ()

[22.03.2009 15:02:32> eb8046: ERR] в System.Threading.ExecutionContext.RunInternal (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта)

[03/22/ 2019 15:02:32> eb8046: ERR] --- Конец трассировки стека от предыдущего местоположения, в которое было сгенерировано исключение ---

[22.03.2009 15:02:32> eb8046: ERR] at System.Threading.Tasks.Task.ExecuteWithThreadLocal (Task & currentTaskSlot)

[22.03.2009 15:02:32> eb8046: ERR] --- Конец трассировки стека из предыдущего расположения, где было исключениебросили ---

[03/22 /2019 15:02:32> eb8046: ERR] в System.Threading.Tasks.TaskToApm.End [TResult] (IAsyncResult asyncResult)

[22.03.2009 15:02:32> eb8046: ERR]в System.Net.FileWebRequest.EndGetResponse (IAsyncResult asyncResult)

[22.03.2009 15:02:32> eb8046: ERR] в System.Net.FileWebRequest.GetResponse ()

[22.03.2009 15:02:32> eb8046: ERR] в System.Net.WebClient.GetWebResponse (запрос веб-запроса)

[22.03.2009 15:02:32> eb8046: ERR]в System.Net.WebClient.OpenRead (адрес Uri)

[22.03.2009 15:02:32> eb8046: ERR] в AccessSharedLocation.Program.buttonDownloadFile_Click () в C: \ Users \ dharti.sutariya \ source \ repos \ AccessSharedLocation \ AccessSharedLocation \ Program.cs: строка 63

[22.03.2009 15:02:32> eb8046: ERR] в AccessSharedLocation.Program.Main (String [] args)вC: \ Users \ dharti.sutariya \ source \ repos \ AccessSharedLocation \ AccessSharedLocation \ Program.cs: строка 48

[22.03.2009 15:02:32> eb8046: ИНФОРМАЦИЯ] Hello World!

[22.03.2009 15:02:32> eb8046: SYS INFO] Статус изменен на Сбой

[22.03.2009 15:02:32> eb8046: SYS ERR] Задание не выполненоиз-за кода выхода -532462766

Ниже мой код C #

using System;

using System.ComponentModel;

using System.Net;

using System.Runtime.InteropServices;



namespace AccessSharedLocation

{

    public class NetworkConnection : IDisposable

    {

        readonly string _networkName;



        public NetworkConnection(string networkName, NetworkCredential credentials)

        {

            _networkName = networkName;



            var netResource = new NetResource

            {

                Scope = ResourceScope.GlobalNetwork,

                ResourceType = ResourceType.Disk,

                DisplayType = ResourceDisplaytype.Share,

                RemoteName = networkName

            };



            var userName = string.IsNullOrEmpty(credentials.Domain)

                ? credentials.UserName

                : string.Format(@"{0}\{1}", credentials.Domain, credentials.UserName);



            var result = WNetAddConnection2(

                netResource,

                credentials.Password,

                userName,

                0);



            if (result != 0)

            {

                throw new Win32Exception(result);

            }

        }



        ~NetworkConnection()

        {

            Dispose(false);

        }



        public void Dispose()

        {

            Dispose(true);

            GC.SuppressFinalize(this);

        }



        protected virtual void Dispose(bool disposing)

        {

            WNetCancelConnection2(_networkName, 0, true);

        }



        [DllImport("mpr.dll")]

        private static extern int WNetAddConnection2(NetResource netResource,

            string password, string username, int flags);



        [DllImport("mpr.dll")]

        private static extern int WNetCancelConnection2(string name, int flags,

            bool force);



        [StructLayout(LayoutKind.Sequential)]

        public class NetResource

        {

            public ResourceScope Scope;

            public ResourceType ResourceType;

            public ResourceDisplaytype DisplayType;

            public int Usage;

            public string LocalName;

            public string RemoteName;

            public string Comment;

            public string Provider;

        }



        public enum ResourceScope : int

        {

            Connected = 1,

            GlobalNetwork,

            Remembered,

            Recent,

            Context

        };



        public enum ResourceType : int

        {

            Any = 0,

            Disk = 1,

            Print = 2,

            Reserved = 8,

        }



        public enum ResourceDisplaytype : int

        {

            Generic = 0x0,

            Domain = 0x01,

            Server = 0x02,

            Share = 0x03,

            File = 0x04,

            Group = 0x05,

            Network = 0x06,

            Root = 0x07,

            Shareadmin = 0x08,

            Directory = 0x09,

            Tree = 0x0a,

            Ndscontainer = 0x0b

        }

    }

}

Может кто-нибудь, пожалуйста, помогите мне с этим.Любая помощь будет отличной.если это достижимо через Powershell, это будет работать.Я пробовал несколько PowerShell, но Azure не позволяет установить / запустить несколько модулей с правами администратора.Тот же PowerShell работает с моей локальной системой, но не через веб-задание Azure.

1 Ответ

2 голосов
/ 27 марта 2019

В изолированной программной среде службы приложений явно не разрешен доступ к портам, необходимым для протокола SMB (137/138/139/445).

В этой статье упоминается в разделе «Ограниченные исходящие порты»:

https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...