2017-01-06 5 views
2

В настоящее время у меня есть веб-приложение C# (ServiceStack), в котором есть файл XML, на который он опирается, чтобы генерировать объекты на стороне клиента. Я больше не хочу хранить этот файл на стороне клиента. Мне нужно использовать репозиторий, который я написал для редактирования файла, когда он хранится на сервере.Редактирование XML на сервере через службу

Я попытался следующие:

  • Нахождение файла расположение XML когда в службе. (он говорит, что текущий каталог службы - это windows/system32, потому что он работает как служба. Теперь имеет смысл.)
  • Вставка файла в один и тот же проект бок о бок. (Та же проблема)

Это уже работает:

  • Извлекает XML (с жестким кодированной путь: с)
  • Deserialize XML
  • Добавить/Удалить в XML по мере необходимости
  • Сохранить

Главное, чтобы эта проблема заключалась в том, что она должна жить там, где живет API. Я не думаю, что я понимаю, как это работает очень хорошо, и я очень благодарен за помощь.

ответ

2

Используйте System.Web.Hosting.HostingEnvironment.MapPath, чтобы найти путь к файлу относительно вашего приложения, если он размещен через IIS.

+0

Я получаю эту ошибку «Относительный виртуальный путь» ../Project.API/OptionPresets.xml 'здесь запрещен. " Каким путем я могу перейти к этому? Не статический путь, где он находится на сервере? – MistaGoustan

+0

Попробуйте изменить его на '' '~/OptionPresets.xml'''. –

+1

Он работает! но только в том же проекте. Вы знаете, как я могу подняться на один уровень? System.Web.Hosting.HostingEnvironment.MapPath ("~ ../ Projcet.API/OptionPresets.xml"); не работает. – MistaGoustan

1

В ServiceStack вы обычно используют Virtual File System для разрешения файлов, например:

base.VirtualFileSources.GetFile("path/to/file.xml").ReadAllText() 

В противном случае, если вы просто хотите, путь, который вы можете использовать IAppHost.MapProjectPath() доступный от v4.5.4 к resolve a file path relative to your WepApp consistently in all App Hosts, например:

HostContext.AppHost.MapProjectPath("~/path/to/file.xml") 
+1

Какое пространство имен «база» исходит из того, что у меня нет ссылки на него. Что касается HostContext.AppHost.MapProjectPath ("~/path/to/file.xml"), я не могу использовать, потому что мне нужно использовать несколько более старую версию ServiceStack из-за лицензирования. Но спасибо за вклад. – MistaGoustan

+0

@BillyCostanza Вы можете использовать базу из своей службы ServiceStack Service, иначе вы можете получить к ней доступ из HostContext.VirtualFileSources – mythz

+0

Я не думаю, что VitualFileSources является частью ServiceStack 3.9.71, поэтому, к сожалению, это не сработает, но, возможно, для кого-то другого. – MistaGoustan