Я хочу читать файлы с разных компьютеров с Windows в той же сети, но НЕ из того же домена. (приложение ASP.NET C#)
Пробовал FileStream (не удается пройти аутентификацию), пробовал FileWebRequest (возвращается к FileStream при использовании file:///) и олицетворение (support.microsoft.com/kb/306158#4), в котором на моей Vista написано "ошибка олицетворения".
Обновление: я исправлена проблема «ошибка олицетворения». Но по-прежнему получаю «Отказано в доступе» с другой машины, хотя я «отзеркалировал» пользователя на обоих, поэтому остается вопрос...
Как правильно подойти к этой задаче?
Правильный способ доступа к файлам на другой машине с помощью С#
Ответы (4)
Вероятно, это не тот ответ, который вы ищете, но вы спросили о правильном способе, поэтому... присоедините файловый сервер к домену и предоставьте сервисному аккаунту ASP.NET доступ к общему ресурсу.
Я не уверен, что это правильный подход, но я так делаю. Предполагая, что вы знаете логин для этого компьютера, я P/вызываю WNetConnection к объекту IPC$ для аутентификации на машине, выполняю свою работу, затем выполняю еще один P/Invoke, чтобы удалить соединение с IPC$.
Попробуйте веб-клиент. Вы можете использовать это для доступа к 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 а>
Сопоставьте диск, например. «Z:» на удаленный компьютер на компьютере, на котором выполняется ваш код. Доступ к файлу с помощью Z:...