Правильный способ доступа к файлам на другой машине с помощью С#

Я хочу читать файлы с разных компьютеров с Windows в той же сети, но НЕ из того же домена. (приложение ASP.NET C#)
Пробовал FileStream (не удается пройти аутентификацию), пробовал FileWebRequest (возвращается к FileStream при использовании file:///) и олицетворение (support.microsoft.com/kb/306158#4), в котором на моей Vista написано "ошибка олицетворения".
Обновление: я исправлена ​​проблема «ошибка олицетворения». Но по-прежнему получаю «Отказано в доступе» с другой машины, хотя я «отзеркалировал» пользователя на обоих, поэтому остается вопрос...
Как правильно подойти к этой задаче?


person Yakov S    schedule 10.08.2009    source источник
comment
Почему бы не написать простой сервис для обслуживания файлов? Вы можете добавить аутентификацию и т. д. по мере необходимости. ИМХО, попытка прямого доступа к файлу через сетевой ресурс или что-то подобное просто требует, чтобы что-то пошло не так.   -  person Gregory    schedule 17.10.2009


Ответы (4)


Вероятно, это не тот ответ, который вы ищете, но вы спросили о правильном способе, поэтому... присоедините файловый сервер к домену и предоставьте сервисному аккаунту ASP.NET доступ к общему ресурсу.

person Pawel Marciniak    schedule 30.11.2009

Я не уверен, что это правильный подход, но я так делаю. Предполагая, что вы знаете логин для этого компьютера, я P/вызываю WNetConnection к объекту IPC$ для аутентификации на машине, выполняю свою работу, затем выполняю еще один P/Invoke, чтобы удалить соединение с IPC$.

person ewrankin    schedule 10.08.2009

Попробуйте веб-клиент. Вы можете использовать это для доступа к URI, и я считаю, что это включает использование протокола «файл» (или вы можете опубликовать удаленный файл через HTTP).

Вы можете использовать WebClient для традиционной загрузки:

WebClient.DownloadFile(Uri address, string localFile)

Или вернуть поток:

WebClient.OpenRead(Uri address)

Однако ваши проблемы с аутентификацией могут остаться. Вы можете предоставить учетные данные стандартным способом Uri, но это может быть невозможно при использовании протокола «файл».

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

<authentication mode="Windows" />
<identity impersonate="true" username="[user]" password="[password]"/>

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

В любом случае, подробнее здесь: Как использовать олицетворение и делегирование в ASP.NET 2.0

person tjmoore    schedule 01.12.2009

Сопоставьте диск, например. «Z:» на удаленный компьютер на компьютере, на котором выполняется ваш код. Доступ к файлу с помощью Z:...

person saille    schedule 20.02.2014