Azure Sites web - 502 - serveur-Web a reçu une réponse invalide, tout en agissant comme une passerelle ou de serveur proxy

Mon application web fonctionne bien sur ma machine locale, mais lors de la publication d'un Windows Azure Site web, j'obtiens l'erreur suivante sur l'un des contrôleur de méthodes d'action:

502 - serveur-Web a reçu une réponse invalide, tout en agissant comme une passerelle ou de serveur proxy.
Il y a un problème avec la page que vous cherchez, et il ne peut pas être affichée. Lorsque le serveur Web (tout en agissant comme une passerelle ou proxy) a communiqué avec le serveur de contenu en amont, il a reçu une réponse invalide à partir du serveur de contenu.

J'ai utilisé Elmah pour capturer plus d'informations et j'obtiens:
Système.ArgumentNullException
La valeur ne peut pas être null. Nom du paramètre: path2

C'est donc le référencement lorsque j'utilise le chemin d'accès.combiner(chemin1, chemin2) dans ma méthode. Je ne peux pas comprendre ce qui se passe, le fichier d'entrée est en cours de lecture fine et les fichiers de sortie sont générés amende lorsque je vérifie le répertoire de sortie.

D'autres suggestions sur ce qui pourrait se passer?

Voici le code de ma méthode d'action:

        [HttpPost]
public ActionResult ProcessProducts(UploadViewModel model)
{
DateTime startTime = DateTime.UtcNow;
DateTime endTime;
TimeSpan totalTime;            
PulProcessor prodManager = new PulProcessor();
string filePath = Path.Combine(Server.MapPath("~/files/incoming"), model.ProductsFileName);
try
{                
using (TextReader prodFile = System.IO.File.OpenText(filePath))
{
CsvReader csv = new CsvReader(prodFile);
//map is at end of this file
csv.Configuration.RegisterClassMap<PulMap>();
List<PulProduct> prodList = csv.GetRecords<PulProduct>().ToList();
foreach (var product in prodList)
{
prodManager.ProcessProduct(product);
}
}
}
catch (Exception ex)
{
Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
}
string currentDate = DateTime.UtcNow.ToString("yyyyMMdd");
string productFileName = "PUL" + currentDate + ".txt";
string exceptionsFileName = "PUL" + currentDate + "belowcost.txt";
WriteFile(prodManager.Products, productFileName);
WriteFile(prodManager.BelowCost, exceptionsFileName);
endTime = DateTime.UtcNow;
totalTime = endTime - startTime;
ViewBag.StartTime = startTime.ToString();
ViewBag.EndTime = endTime.ToString();
ViewBag.TotalTime = totalTime.ToString();
ViewBag.TotalOutput = prodManager.Products.Count.ToString();
ViewBag.ProductCounter = prodManager.RecordsProcessed;
ViewBag.FileName = productFileName;
ViewBag.ExFileName = exceptionsFileName;
ViewBag.Exceptions = prodManager.BelowCost.Count.ToString();
return View();
}
private void WriteFile(List<PulFinalProduct> prodList, string fileName)
{
try
{
string filePath = Path.Combine(Server.MapPath("~/files/pul"), fileName);
StreamWriter writer = new StreamWriter(filePath, false);
StringBuilder fileHeader = new StringBuilder();
fileHeader.Append("Inventory Number\t");
fileHeader.Append("MPN\t");
fileHeader.Append("Retail Price\t");
fileHeader.Append("Seller Cost\t");
fileHeader.Append("Buy It Now Price\t");
fileHeader.Append("Starting Bid\t");
fileHeader.Append("ChannelAdvisor Store Price\t");
fileHeader.Append("Quantity\t");
fileHeader.Append("Quantity Update Type\t");
fileHeader.Append("UPC\t");
fileHeader.Append("Weight\t");
fileHeader.Append("Brand\t");
fileHeader.Append("Manufacturer\t");
using (writer)
{
writer.WriteLine(fileHeader.ToString());
foreach (var product in prodList)
{
StringBuilder productLine = new StringBuilder();
productLine.Append(product.InventoryNumber + "\t");
productLine.Append(product.MPN + "\t");
productLine.Append(product.RetailPrice.ToString() + "\t");
productLine.Append(product.SellerCost.ToString() + "\t");
productLine.Append(product.BINPrice.ToString() + "\t");
productLine.Append(product.StartingBid.ToString() + "\t");
productLine.Append(product.CAStorePrice + "\t");
productLine.Append(product.Quantity + "\t");
productLine.Append(product.QUType + "\t");
productLine.Append(product.UPC + "\t");
productLine.Append(product.Weight + "\t");
productLine.Append(product.Brand + "\t");
productLine.Append(product.Manufacturer + "\t");
writer.WriteLine(productLine.ToString());
}
}
}
catch (Exception ex)
{
Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
}
}

Ici est ce que le Azur Eventlog me donne:

Value cannot be null. Parameter name: path2 at System.IO.Path.Combine(String path1, String path2) at Jemco.Web.Controllers.PartsUnlimitedController.ProcessProducts(UploadViewModel model) at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__36(IAsyncResult asyncResult, ActionInvocation innerInvokeState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3c() at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass45.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3e() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass30.<BeginInvokeActionMethodWithFilters>b__2f(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass1e.<>c__DisplayClass28.<BeginInvokeAction>b__19() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass1e.<BeginInvokeAction>b__1b(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) at System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) at System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) at System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(IAsyncResult asyncResult, ProcessRequestState innerState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

OK, j'ai été capable de faire le débogage distant sur ce azure site. Le code à l'intérieur de mon contrôleur de l'action est en cours d'exécution fine. Après je obtenir l'original 502 erreur, le contrôleur continue à traiter les données d'entrée, puis d'écrire les fichiers de sortie. Tout fonctionne bien et le seul problème que je vais avoir c'est de faire 502 page alors que je suis en attente pour le processus de charge et de la vue suivante. Un contrôleur de disposer d'une certaine quantité de temps pour retourner à un point de vue et si ça ne marche pas, c'est ce pourquoi je me fais l'erreur 502?

EDIT: je suis assez sûr de ce que je suis en train de vivre est une erreur de dépassement de délai parce que ma méthode de contrôleur prend trop de temps à s'exécuter. J'ai probablement ne peut pas accélérer le contrôleur de méthode donc je ne suis pas sûr de ce que je peux faire. Je ne pense pas que je peut ou doit changer les paramètres de délai d'attente sur le serveur alors peut-être il y a quelque chose à l'aide d'ajax qui peut être fait comme l'envoi d'une mise à jour de statut du navigateur après chaque tellement souvent. Je suis totalement nouveau sur ce je vais donc devoir faire de la recherche.

Avez-vous échec de la journalisation des requêtes activé dans votre site? Il pourrait être utile d'obtenir des messages d'erreur à partir de IIS.

OriginalL'auteur David | 2014-08-08