Сначала я приведу краткое резюме, а затем добавлю подробности, как могу.
У меня приложение MVC3, работающее на двух серверах.Я позвоню им box1
и box2
.На обоих серверах установлены одинаковые ОС, версии IIS, одно и то же приложение, загруженное из Subversion.box1
работает абсолютно без нареканий.Он может выполнять загрузку по пути, указанному в web.config.Однако, когда я пытаюсь загрузить, используя box2
, каталог создается , поэтому мой оператор Path.Combine
работает нормально, но фактический загружаемый файл никогда не создается.
Я надеваюне появляется никакого сообщения об ошибке, загрузка просто не происходит вообще.Я думал, что это связано с настройкой приложения для пути.Я подумал, что box2
(в другом домене) не имеет прав.Это неверно по двум причинам
- Я получаю ошибку «Отказано в доступе», когда задаю путь к чему-то недоступному.
Я даже пытался сохранить в box2
прямо на жестком диске.Все еще только создает папку.
[HttpPost]
public ActionResult Upload(HttpPostedFileBase uploadfile, string id)
{
var dr405 = new DR405Service().GetDR405ById(new DR405DBContext(), DR405Profile.CurrentUser.TangiblePropertyId);
var saveLocation = Path.Combine(DR405Service.SavePath + DR405Profile.CurrentUser.TangiblePropertyId);
System.IO.Directory.CreateDirectory(saveLocation);
if ((int)uploadfile.ContentLength / 1024 <= 15000)
{
uploadfile.SaveAs(Path.Combine(saveLocation, Path.GetFileName(uploadfile.FileName)));
var file = new dr405files { TangiblePropertyId = DR405Profile.CurrentUser.TangiblePropertyId, FileName = uploadfile.FileName, UploadDate = DateTime.Now };
//dr405.dr405files.Add(file);
//c.dr405s.Add(dr405);
db.Entry(file).State = file.FileId == 0 ? EntityState.Added : EntityState.Modified;
//db.Entry(dr405).State = EntityState.Modified;
new DR405Service().Save(db);
ViewData["UploadStatus"] = String.Format("File name: {0}, {1}Kb Uploaded Successfully.", uploadfile.FileName, (int)uploadfile.ContentLength / 1024);
}
else
{
ViewData["UploadStatus"] = String.Format("File exceeds 15MB upload limit. Please reduce size and try again.", uploadfile.FileName);
}
return View();
}
Вот несколько препятствий, с которыми я борюсь
box2
- рабочий сервер, поэтому яНе удается установить удаленный отладчик box2
размещен в другой группе, и я должен сказать им, как его настроить.Они не смогут или не смогут понять, как это исправить.
Обновление
Хотя это не самый элегантный код, он работает просто отлично.
![enter image description here](https://i.stack.imgur.com/6UaiQ.gif)
Обновление # 2
Я изменил свое действие, чтобы выполнить перенаправление в Google, поскольку на самом деле я пока не могу запустить отладчик на удаленном сервере.Я обнаружил, что на box1
происходит перенаправление.На box2
перенаправление не происходит.Это дает мне основную уверенность в том, что действие контроллера даже не вызывается box2
.Как это может быть?
[HttpPost]
public ActionResult Upload(HttpPostedFileBase uploadfile)
{
Response.Redirect("http://www.google.com");
var dr405 = new DR405Service().GetDR405ById(new DR405DBContext(), DR405Profile.CurrentUser.TangiblePropertyId);
var saveLocation = Path.Combine(DR405Service.SavePath + DR405Profile.CurrentUser.TangiblePropertyId);
System.IO.Directory.CreateDirectory(saveLocation);
if ((int)uploadfile.ContentLength / 1024 <= 15000)
Обновление # 3
Независимо от того, какая из этих версий Path.Combine я использую, это ничего не меняет.Пожалуйста, перечитайте вопрос.Action
даже не вызывается на box2
.![enter image description here](https://i.stack.imgur.com/hK6lH.gif)