2016-11-22 10 views
0

В нашей сети я интранет-сервер, который отвечает за хранение файлов. Первоначально сервер должен был работать только в среде интрасети, но теперь необходимо обмениваться файлами с внешними веб-приложениями. Сделать доступ к этому серверу из Интернета не представляется возможным.Использование WebClient для получения файлов интрасети

Я хочу создать решение ASP.NET MVC, которое использует WebClient для получения этих файлов с сервера интрасети и отправки их пользователю через FileResult внешнего приложения. Этому клиенту будут предоставлены пользовательские учетные данные пользовательского домена. До сих пор я пытался создать класс CredentialCache, установить правильные учетные данные и добавить его в веб-клиентов Credentials свойства, как показано в следующем коде:

public ActionResult Download(int id, string fileName) 
{ 
    var fileService = new FilesService(); 
    var documentUrl = fileService.GetUrlFileByFileId(id); 
    string filePath = "http://my.intranet.com/" + documentUrl; 
    var fileNameFromUrl = filePath.Substring(filePath.LastIndexOf("\\") + 1); 
    byte[] filedata; 

    CredentialCache cc = new CredentialCache(); 
    cc.Add(new Uri("http://my.intranet.com/"), 
     "ntlm", 
     new NetworkCredential("myUserName", "myPassword", "myDomain")); 

    using (var client = new WebClient()) 
    { 
     client.Credentials = cc; 
     filedata = client.DownloadData(filePath); 
    } 

    string contentType = MimeMapping.GetMimeMapping(filePath); 

    var cd = new ContentDisposition 
    { 
     FileName = fileName, 
     Inline = false 
    }; 

    Response.AppendHeader("Content-Disposition", cd.ToString()); 

    return File(filedata, contentType); 
} 

По вопросу, публикуемую в Domain credentials for a WebClient class don't work он должен работать, но это не так. Он работает только в том случае, если я запускаю проблему на localhost, но когда я публикую свое решение на тестовом сервере, он возвращает ошибку 401. Мой вопрос - как это сделать? И можно ли загружать файлы с помощью этого метода?

UPDATE --- Я опубликовал свое тестовое приложение на другом сервере и начал работать. Теперь тестовое приложение находится на другом сервере, чем сервер, который хранит файлы. Любые идеи, почему он не работает, когда оба находятся на одной машине?

ответ

0

401 ошибка несанкционирована, поэтому, возможно, проблема связана с разрешениями. Вы уверены, что учетная запись пользователя, которую вы используете для входа в эту папку, имеет правильный доступ?

+0

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