Сохранить файл на сетевом ресурсе C#. Net core 3 - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь сохранить файл xml на сетевом ресурсе, но по неизвестной причине процесс сохранения просто останавливается.

ex: у меня есть документ xml, который я хочу сохранить как

var filename = {guid}.xml
var shareFolder = "\\\\<my machine\\Share";
var filePath = Path.Join(shareFolder,filename);

Я проверил, что

Directory.Exists(shareFolder)

возвращает true - поэтому, по крайней мере, папка существует на общем ресурсе.

Разрешение на общий ресурс для папка «Все» для «записи».

Я пытался использовать

xml.Save(filePath); 
File.WriteAllText(filePath, xml.OuterXml);

, но получил аналогичные результаты, когда процесс сохранения просто остановился. Логи мне тоже ничего не говорят.

1 Ответ

0 голосов
/ 04 мая 2020

Я использую https://github.com/mj1856/SimpleImpersonation, чтобы заставить аутентификацию работать.

Окончательный результат для. Net Core 3.1 выглядит так:

    private void Process xml(string xmlInput)
    {
            var xmlDocument = XDocument.Parse(xmlInput);
            var filename = $"{Guid.NewGuid()}.xml";
            var filePath = Path.Combine(_outputFolder, filename);

            if (filePath.StartsWith("\\"))
            {
                SaveOnNetworkShare(xmlDocument, filePath);
            }
            else
            {
                SaveLocally(xmlDocument, filePath);
            }

    }

    private void SaveLocally(XmlDocument xml, string filePath)
    {
        xml.Save(filePath);
    }

    private void SaveOnNetworkShare(XmlDocument xml, string filePath)
    {
        try
        {
            Impersonation.RunAsUser(_credentials, LogonType.Network, () =>
            {
                xml.Save(filePath);
            });
        }
        catch (ImpersonationException ex)
        {
            _logger.LogError(new EventId(-1, "Error saving file"), ex, $"Could not save file to filepath {filePath}");
        }
    }
...