Я устанавливаю основной веб-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 :