NetworkCredential не работает во втором запросе IIS Server и далее

Я разработал веб-API, который отлично работает на локальном хосте. Я использовал класс NetworkCrendential для доступа к файлам общих папок в моей системе. Он отлично работает для каждого запроса, который я отправляю во время работы на локальном хосте. Но как только я разверну его на веб-сервере IIS, он не сможет получить данные из второго запроса.

 using (NetworkConnection nc = new NetworkConnection(@"\\172.18.11.11\d$", new NetworkCredential(@"Administrator", "Siemens123$", "AD001")))
            {
                _listDataSetInfo = new List<DataSetInfo>();
                var folderPath_single = @"\\172.18.11.11\d$\BMC\_Settings\SINGLE";
                var items_single = new DataAccessLayer().GetData(folderPath_single);
                var folderPath_folder = @"\\172.18.11.11\d$\BMC\_Settings\FOLDER";
                var items_folder = new DataAccessLayer().GetData(folderPath_folder);
                foreach (var item in items_single)
                {
                    _listDataSetInfo.Add(item);
                }
                foreach (var item in items_folder)
                {
                    _listDataSetInfo.Add(item);
                }
                // _listDataSetInfo = new DataAccessLayer().GetData(folderPath_single);
                _CancellationToken = _CancellationTokenSource.Token;
                //nc.Dispose();
            }

public class NetworkConnection : IDisposable
{
    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)
        {
            NetworkConnection nc = new NetworkConnection(@"\\172.18.11.11\d$", new NetworkCredential(@"Administrator", "Siemens123$"));
            throw new Exception("Error connecting to remote share");
        }
    }

    ~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
}

Пожалуйста, укажите, почему этот код не работает для получения данных на сервере IIS, при этом нормально работает на локальном хосте.

«почему этот код не работает для получения данных на сервере IIS, при этом нормально работает на локальном хосте» - означает ли это, что на локальном хосте вы используете не IIS, а другой веб-сервер? Который из?
vasily.sib 10.08.2018 08:32

Нет, с localhost тоже я использую iisexpress, так что все равно. Я также не могу понять, в чем проблема. это связано с кодом или внутри сервера, или это может быть проблема сети. но в первый раз он предоставляет мне данные, поэтому это не может быть проблемой сети. и поскольку он предоставляет данные, я думаю, что iis также работает нормально. Но тогда почему при втором запросе он не работает.

Karthik Saxena 10.08.2018 08:55

Взгляните на stackoverflow.com/questions/7268962/…, заголовок немного вводит в заблуждение, но если вы просмотрите комментарии, он фактически говорит о той же ситуации (прерывистый сбой в IIS). Использование WNetUseConnection решило эту проблему за них.

Paul-Jan 10.08.2018 10:32

IIS Express и IIS - разные вещи, поэтому никогда не говорите «это одно и то же». Вы можете найти подсказки из blog.lextudio.com/…. В вашем случае вы вызываете какой-то Win32 API, поэтому их поведение может измениться при работе в IIS.

Lex Li 10.08.2018 14:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
282
0

Другие вопросы по теме