Сведения о вопросе

GANGST1ER

09:01, 1st August, 2020

Теги

Открыть файлы из сетевой папки в веб-приложение c#

Просмотров: 676   Ответов: 5

У меня есть веб-приложение, которое должно читать (и, возможно, записывать) файлы из общего сетевого ресурса. Мне было интересно, как лучше всего это сделать?

Я не могу предоставить сетевой службе или учетным записям aspnet доступ к сетевому ресурсу. Я вполне мог бы использовать олицетворение.

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


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

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

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



  Сведения об ответе

P_S_S

12:11, 21st August, 2020

Учитывая, что у всех уже есть доменные учетные записи. Попробуйте использовать встроенную аутентификацию IIS. Вы получите уродливую коробку входа в систему из сети, но ваши creds должны перейти в общий файловый ресурс.

@lomaxx
Вы говорите, что только у вас есть завивки для общего ресурса или что вы вручную сопоставили его с буквой диска. Если позже вы можете использовать ucn \host\share так же, как вы использовали бы c:\shared_folder.

Случайность Будет ли обременительно зеркальное отображение общего ресурса в локальную папку на хосте? Я слышал, что ROBOCOPY-это очень удобно.

другая идея. Запустите IIS на вашей целевой папке, которую вы можете прочитать через http, и если вам нужно написать исследование webdav.


  Сведения об ответе

$DOLLAR

10:09, 10th August, 2020

У меня не было никаких проблем с прозрачным подключением к сетевым общим ресурсам, как если бы они были локальными дисками. Единственная проблема, которую вы можете иметь, это то, что вы упомянули: имея учетную запись aspnet получить доступ к общей папке. Олицетворение, вероятно, лучший способ сделать это.

Вы должны иметь возможность использовать любые объекты filestream для доступа к сетевому ресурсу, если он имеет букву диска на сервере.


  Сведения об ответе

FAriza

13:02, 11th August, 2020

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

Есть много различных способов сделать это. Мы решили сделать все запросы для запуска под пользователем, которого мы настроили, и просто добавили запись web.config и настроили разрешения безопасности для папок для пользователя. Эта статья очень хорошо объясняет установку.


  Сведения об ответе

DO__IT

17:58, 15th August, 2020

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

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

public interface IDocumentService
{
    public string BuildTrustedRelationship(string privateKey);

    public byte[] ReadFile(string token, string fileName);

    public void WriteFile(string token, string fileName, byte[] file);
}

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


  Сведения об ответе

lesha

14:40, 26th August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться