Как сделать файл журнала сервера доступным через мой веб-сайт ASP.NET MVC? - PullRequest
2 голосов
/ 13 апреля 2010

У меня есть веб-сайт ASP.NET MVC, который работает совместно со службой Windows, которая обрабатывает загрузку файлов. Для удобства обслуживания сайта я бы хотел, чтобы файл журнала для службы Windows был доступен (только для меня) через веб-сайт, чтобы я мог нажать http://myserver/logs/myservice, чтобы просмотреть содержимое файла журнала. , Как я могу это сделать?

Можно предположить, что служба могла либо записать свой файл журнала в папку «Журналы» на верхнем уровне сайта, либо оставить его там, где он есть, и настроить виртуальный каталог, чтобы он указывал на него. Что из этого лучше - или есть другой, лучший способ?

Где бы ни хранился файл, я вижу, что будет другая проблема. Я опробовал первый вариант (папка «Журналы» на моем веб-сайте), но при попытке получить доступ к файлу через HTTP я получаю сообщение об ошибке:

Процесс не может получить доступ к файлу 'foo', поскольку он используется другим процессом.

Теперь я знаю по опыту, что моя служба держит файл заблокированным для записи во время работы, но я все еще могу открыть файл в Блокноте для просмотра текущего содержимого. (Я удивлен, что IIS настаивает на доступе для записи, если это то, что происходит).

Как я могу обойти это? Неужели мне действительно нужно написать обработчик, чтобы прочитать файл и передать его браузеру самостоятельно? Или я могу это исправить с помощью конфигурации или чего-то такого?

PS. Я использую IIS7, если это помогает.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2010

К сожалению, я боюсь, что вам придется написать обработчик, который откроет файл и вернет его клиенту. Я написал расширение IIS Manager, которое отображает файлы журнала сервера, и что я заметил, что даже простое

System.IO.File.OpenRead("")

все еще может работать с той же проблемой и возвращать ту же ошибку. Это было немного странно. В конце концов я использовал

System.IO.File.Open("", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)

и я мог легко открыть файл, пока сервер записывал в него логи:)

1 голос
/ 15 апреля 2010

Я думаю, что виртуальный каталог - это «нормальное» решение, если вы добавите каталог (приложение) с правами READ ONLY + возможно, также и «BROWSE directory» (чтобы вы могли видеть содержимое папки, отображаемое IIS).

(Но как только вы это сделаете, вам следует учитывать, что вы также анонимно получаете доступ к этой папке - если вы не включите аутентификацию, так что следите за «секретным» содержимым лог-файлов, которые вы можете выставить - просто мысль.)

Другой подход, который я предпочитаю сам, заключается в создании страницы MVC / ASP.NET, которая выполняет поиск в папке с помощью обычного кода, чтобы вы на 100% могли фильтровать любые данные, отображаемые в HTML. Вы можете открывать файлы как в режиме TextStream, так и в режиме только для чтения.

Если получить доступ к папке журналов не удается, я бы использовал виртуальный каталог с доступом ТОЛЬКО ДЛЯ ЧТЕНИЯ, а затем запрограммировал что-то, что отображает файлы журнала в виде HTML на моем экране и с уровнями детализации. Возможно, даже сначала добавьте своего рода «логин». Но все зависит от ваших уровней безопасности и содержимого файлов журналов.

это имеет значение для тебя? если нет, пожалуйста, объясните больше, поскольку я уже несколько раз думал об этом в подобных ситуациях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...