Загрузка файла на сервер с балансировкой нагрузки - PullRequest
4 голосов
/ 29 декабря 2008

У меня есть веб-проект, который я разработал, где одной из основных функций является загрузка файлов.

Все разрешения основаны на аутентификации Windows. Когда я впервые создал проект, я не понимал, что он будет на сервере с балансировкой нагрузки. Теперь он находится в среде с сервером с балансировкой нагрузки, и загрузка файлов стала серьезной проблемой.

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

Итак, я думаю, что мои решения будут заключаться в создании службы на серверах, которая проверяет каталог загрузки и синхронизирует их. Другое возможное решение, которое я вижу, - хранить файлы в базе данных, с которой у меня были некоторые проблемы в прошлом.

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

Спасибо.

ОБНОВЛЕНИЕ - поэтому я изменил пулы приложений для запуска через учетную запись домена с полными разрешениями для общего ресурса и самой папки в разрешениях Windows. Виртуальный каталог имеет полные права в IIS, но я все еще получаю ту же проблему.

Одной из вещей, которые необходимо сделать с этим, является также возможность создавать каталоги, что, я думаю, может сбить меня с толку сейчас. Я просто использую System.IO.Directory.CreateDirectory

Любые другие мысли о том, где я мог бы пропустить разрешения?

Ответы [ 3 ]

6 голосов
/ 29 декабря 2008

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

В нашей производственной среде все наши отдельные сайты имеют свои собственные пулы приложений. Каждый из пулов приложений имеет собственную учетную запись домена, что значительно упрощает управление разрешениями в файловой системе и на сервере SQL. Каждая из этих учетных записей является членом доменной группы IIS WP. На каждом из серверов в кластере WP IIS домена является членом локальной встроенной группы IIS_WPG. Конфигурация IIS идентична на каждом сервере в кластере. Важным эффектом этого является обеспечение того, что конкретное веб-приложение всегда работает под одним и тем же идентификатором, независимо от того, какой сервер в кластере используется.

С настройкой, которую я описал, было бы очень просто реализовать решение виртуального каталога, хотя вам все равно придется беспокоиться о других очевидных проблемах, таких как коллизии имен и тому подобное. Если вы по-прежнему используете настройку идентификатора пула приложений по умолчанию, я думаю, что реализация описанного мною поможет в целом облегчить вашу жизнь при работе с конфигурацией кластера.

В этой статье перечислены некоторые преимущества и недостатки хранения в файловой системе:

Преимущества

Один из Основные преимущества хранения файла на диск это очень легко сделать. Просто вызовите SaveAs при загрузке файла контроль, и вы в значительной степени сделали.

Еще одним преимуществом является то, что файлы на диск легко резервировать; ты просто копируешь файлы в другое место. это также облегчает выполнение дополнительных резервное копирование; файлы, которые уже были резервное копирование не нужно копировать еще раз.

Недостатки

Запоминание ваши файлы в файловой системе имеют Недостатков также. Наверное самая проблемная проблема слабо связанная природа файлов на диск. У них нет сильных отношений с записью в базе данных. Так, когда вы удаляете, скажем, продукт из базы данных, вы можете получить изображение продукта-сироты. Здесь нет прямой способ сделать ВНУТРЕННЕЕ СОЕДИНЕНИЕ таблица продуктов и ваши изображения папка, чтобы определить, что осиротел файлы, которые вы оставили. Это означает, что разработчик страницы несет ответственность за написание кода, который удаляет файл с диска всякий раз, когда связанный записи базы данных удаляются.

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

0 голосов
/ 31 декабря 2008

FYI,

Решением этой проблемы было временное олицетворение с учетной записью пользователя, которая имела доступ к общему ресурсу, разрешения для папки и разрешения для виртуального каталога.

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

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

Вот ссылка на код, который все это сделал:

http://support.microsoft.com/kb/306158#4

0 голосов
/ 29 декабря 2008

Ваше решение должно работать нормально:

  1. Создать учетную запись сети
  2. иметь пулы приложений на каждом сервере, работающие под этой учетной записью
  3. создать папку на определенном сервере и предоставить этой сетевой учетной записи права на нее
  4. установить папку как «общий ресурс» и предоставить права учетной записи для общего ресурса
  5. Настройка всех серверов на использование этого каталога для хранения загруженных файлов
...