Является ли FileInfo.Copy по сети хорошим решением? Требуется ли CAS?

Кажется, все, что я делаю, включает в себя win-сервисы, копирующие файлы между серверами. Кажется, я получаю много исключений типа security & securityaccess и никогда не до конца понимаю причины. Мне интересно, является ли fileinfo или file.copy хорошим решением или есть ли лучшее. Есть ли определенный атрибут, который я должен использовать, или что-то, чтобы избежать этих ошибок? Проблема не связана с учетной записью или паролем. Например, \ ipaddress \ sharename \ ipaddress \ drive \ path с использованием учетных записей домена.

--- Добавлен Конкретный пример.---
- Я вхожу на серверA как домен \ имя пользователя. (включая доменное имя)
- Я открываю файл eplorer в адресной строке введите \\ serverB\ c $ \ folder нажмите Enter, я щелкаю правой кнопкой мыши, создаю новый файл. Нет проблем.
- Я устанавливаю службу, захожу в свойства, выберите "Вход в систему", "Эта учетная запись" и задайте имя пользователя как домен \ имя пользователя (включая имя домена) с тем же паролем, с которым я вошел на серверА. Он принимает это без проблем.
Приложение выполняет FileSystemWatcher на \\ сервереA и копирует на \\ серверB при изменении, чтобы синхронизировать файлы конфигурации.

private void CopyNewFileToClone()  
{  
    FileInfo OriginalConfigFile = new FileInfo(Path.Combine(ConfigurationManager.AppSettings.Get("directoryToWatch"), ConfigurationManager.AppSettings.Get("fileToWatch")));  
    FileInfo CloneConfigFile = new FileInfo(Path.Combine(ConfigurationManager.AppSettings.Get("directoryToCopyTo"), ConfigurationManager.AppSettings.Get("fileToCopyTo")));
    FileInfo tmp = new FileInfo(Path.Combine(CloneConfigFile.DirectoryName,"~" + CloneConfigFile.Name));  

    OriginalConfigFile.CopyTo(tmp.FullName, true);  
    tmp.CopyTo(CloneConfigFile.FullName, true);  
    tmp.Delete();  
}  

Когда я запускаю сервис, я получаю Сервис не может быть запущен.
System.UnauthorizedAccessException: доступ к пути "\\ серверB\ C $ \ папка \ имя файла" запрещен.

2 ответа

Решение

Это было связано с политикой безопасности доступа кода. Ран
c:\Windows\Microsoft.NET\Framework\v2.0.50727\CasPol.exe -af <path\application.exe>
и ошибка устранена.

Добавление в качестве шага установки во все приложения, которые должны записывать на HD, особенно по сети через unc, такой как \server\share\file.

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

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

Другие вопросы по тегам