Как исправить: значение не может быть нулевым. Имя параметра: путь - PullRequest
0 голосов
/ 14 января 2019

Я устанавливаю основной веб-API asp.net, размещенный на IIS. API имеет некоторую логику для создания XML-документов, которые должны храниться в папке непосредственно под диском C: сервера. Поток выглядит следующим образом:

Клиент отправляет запрос, который обрабатывается и сохраняется в базе данных. Когда транзакция базы данных завершена, генерируется XML-документ с некоторыми данными. Я сохранил путь для создания этого документа в файле appsettings.json следующим образом:

"ProtocolPath": {
"PathToFolder": "C:\\some_folder"
}

В моем коде у меня есть класс, который хранит переменную Path и инициализирует ее через конструктор:

public string Path { get; set;}

public ProtocolService(object entry, IConfiguration config)
{
    _config = config;
    Path = GetProtocolPath();
    _entry = entry;
}

private string GetProtocolPath()
{
  try
  {

    if(!Directory.Exists(_config.GetSection("ProtocolPath")
    .GetValue<string>("PathToFolder")))
    {            
       Directory.CreateDirectory(_config.GetSection("ProtocolPath")
      .GetValue<string>("PathToFolder"));
    }

    StringBuilder pathBuilder = new 
    StringBuilder(_config.GetSection("ProtocolPath").GetValue<string> 
    ("PathToFolder"));
    pathBuilder.Append(DateTime.Now.ToString("yyyyMMdd"));
    pathBuilder.Append(".xml");

    return pathBuilder.ToString();

   }
   catch (Exception ex)
   {
      var msg = $"{ex.Message} : {ex.InnerException}";
      Console.WriteLine(msg);
      throw;
    }
  }

У меня есть логика, которая генерирует объект, который нужно сериализовать в XML. Для этого я использую класс расширения.

public static class XmlGenerator
{
    private static FileStream _xmlFileStream;
    private static XmlWriter _xmlWritter;

public static void ConvertToXml(this Protocol obj, string pathToProtocol)
    {
        try
        { 
            XmlSerializer serializer = new XmlSerializer(typeof(Protocol));
            _xmlFileStream = new FileStream(pathToProtocol, FileMode.Append, FileAccess.Write);
            _xmlWritter = XmlWriter.Create(_xmlFileStream, new XmlWriterSettings() { OmitXmlDeclaration = true, Async = true, Encoding = Encoding.UTF8 });
            serializer.Serialize(_xmlWritter, obj, new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty }));

        }
        catch (Exception ex)
        {
            var msg = $"{ex.Message} : {ex.InnerException}";
            Console.WriteLine(msg);
        }
        finally
        {
             _xmlWritter.Flush();
             _xmlWritter.Close();
            _xmlFileStream.Flush();
            _xmlFileStream.Close();
        }
    }
}

Локально папка правильно создается в C: и файлы XML также генерируются правильно. Однако на сервере, где размещен API, ничего этого не происходит, и в журналах отображается только:

Value cannot be null.
Parameter name: path : 

1 Ответ

0 голосов
/ 14 января 2019

Похоже, это проблема с вашим GetProtocolPath(). pathBuilder не вернуть формат пути.

private string GetProtocolPath()
    {
        try
        {
            string path = _config.GetSection("ProtocolPath").GetValue<string>("PathToFolder");
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            StringBuilder pathBuilder = new StringBuilder()
                .Append(path)
                .Append("\\")
                .Append(DateTime.Now.ToString("yyyyMMdd"))
                .Append(".xml");

            return pathBuilder.ToString();

        }
        catch (Exception ex)
        {
            var msg = $"{ex.Message} : {ex.InnerException}";
            Console.WriteLine(msg);
            throw;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...