Это старый вопрос, но я не думаю, что здесь есть правильный ответ.
На самом деле есть 2 вопроса (3 вопроса, но третий является излишним).
Первый вопрос: если процесс .Net, запущенный на (3-м) клиентском компьютере, копирует файл из одного сетевого ресурса в другой сетевой ресурс, имеет ли значение, если исходный и целевой ресурсы находятся на одном компьютере (разные) с клиента) против 2 разных компьютеров? Ответ явно нет. Нет механизма, нет секретного туннеля между сетевыми ресурсами. Данные должны перемещаться к клиенту, а затем к другому ресурсу. Это не имеет значения, если операция является копией или перемещением, и на самом деле не имеет значения, если общие папки находятся на том же компьютере, что и клиент (и вы действительно получаете доступ к папкам как общие сетевые ресурсы с путем UNC, а не как локальные папки).
Второй вопрос: как избежать этого кругового обхода? Вот несколько предложений:
- Если источник и цель находятся в одном и том же общем ресурсе, перемещение файла не требует обратной передачи, поскольку ОС обновляет только ссылки в файловой системе.
- Процесс, запущенный на компьютере с исходным или целевым общим ресурсом, может выполнить копирование без обращения к клиенту. Этот процесс может быть удаленной копией и т.д., если любой из хостов работает под управлением Linux. На хосте Windows вы можете установить службу WCF, которая копирует файлы при поступлении запроса от клиента.