Erreur 500 API Web

J'ai essayé de corriger cela pour les 4 dernières heures.

J'ai un nouveau Projet d'API Web qui fonctionne à 100% de l'amende sur le développement,

MAIS sur le serveur live, je reçois un 500 Internal Server Error.

Quand je le déploiement d'une nouvelle version et d'envoyer une demande directement à http://URL/Action je reçois le message d'erreur. MAIS
Si je vais à http://URL/ d'abord, puis envoyer la requête POST à http://URL/Action, il fonctionne.

La même chose est le cas lorsqu'il n'y a pas de requête à l'API pour 12,13 hours

Donc pour qu'il fonctionne, je dois d'abord ouvrir: http://URL/Action, puis envoyer les POST demande.

De sorte que le Projet utilise Ninject et c'est le Startup.cs

using System.Collections.Generic;
using System.Reflection;
using System.Web.Http;
using API.MyApi;
using Business.Bindings;
using Microsoft.Owin;
using Ninject;
using Ninject.Modules;
using Ninject.Web.Common.OwinHost;
using Ninject.Web.WebApi.OwinHost;
using Owin;

[assembly: OwinStartup(typeof(Startup))]
namespace API.MyApi
{

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            var config = new HttpConfiguration();
            WebApiConfig.Register(config);
            app.UseWebApi(config);

            app.UseNinjectMiddleware(CreateKernel);
            app.UseNinjectWebApi(config);

            GlobalConfiguration.Configuration.IncludeErrorDetailPolicy =  IncludeErrorDetailPolicy.Always;
        }

        private static StandardKernel CreateKernel()
        {
            var kernel = new StandardKernel();
            kernel.Load(Assembly.GetExecutingAssembly());

            var modules = new List<INinjectModule>
            {
                new BusinessBindings(),
                new DataBindings()
            };
            kernel.Load(modules);
            return kernel;
        }

    }
}

Et la WebAPI Config

using System.Web.Http;

namespace API.MyApi
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            //Web API configuration and services

            //Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            config.Formatters.XmlFormatter.UseXmlSerializer = true;
            GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
        }
    }
}

J'ai essayé d'ajouter cette ligne de code pour obtenir une vue de l'ensemble du message d'erreur:

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

et aussi en ajoutant ceci à la web.config fichier

<customErrors mode="Off"/>

Mais l'erreur que je reçois dans PostMan est:

Erreur 500 API Web

Après je navigue à URL.com dans le Navigateur:

Erreur 500 API Web

Alors Si j'envoie la requête POST:

Erreur 500 API Web

EDIT:

C'est mon gestionnaire d'exception de l'attribut:

public class ExceptionHandlerAttribute : ExceptionFilterAttribute
{
    public override void OnException(HttpActionExecutedContext actionExecutedContext)
    {
        var exception = actionExecutedContext.Exception;

        using (var exceptionLogger = new CustomLogger("Exceptions"))
        {
            exceptionLogger.LogExceptionMessage(exception.Message, exception.InnerException, exception.StackTrace);
        }

        base.OnException(actionExecutedContext);
    }

}

et le Contrôleur est décoré avec l'attribut:

[ExceptionHandler]
public class SmartOneCController : BaseApiController
{
    public SmartOneCController(CustomLogger logger)
    {
    }

}

Donc ce que cet Attribut doit faire est de vous Connecter à l'exception d'un fichier journal Qui travaille testé sur le Développement et le déploiement de la version.

Mais n'est pas connecte à l'Exception de la 500 Internal Server Error

Contrôleur de Code, je ne vois pas comment le contrôleur de code de l'aide ici, que tout fonctionne après la visite de l'URL de Base de l'API: URL.com après ce que je peux appeler cette méthode POST et tout fonctionne.

[ExceptionHandler]
public class SmartOneCController : BaseApiController
{
    public SmartOneCController(CustomLogger logger, IAssetsProvider assetsProvider, ISatelliteTrackerProvider satelliteTrackerProvider) : base(logger, assetsProvider, satelliteTrackerProvider)
    {
    }

    public void Post(HttpRequestMessage request)
    {
        try
        {

            //Reading data as XML string to log to files - In case message structure is changed
            var xmlDoc = new XmlDocument();
            xmlDoc.Load(request.Content.ReadAsStreamAsync().Result);
            var str = xmlDoc.InnerXml;

            _logger.LogMessage(MessageType.Information, string.Format("RAW XML Message: {0}", str));

            //Convert to model

            var model = XMLHelper.FromXml<trackermessages>(str);
 ......
  • Merci de poster l'exception appropriée des détails (nom, un message, une trace de la pile) de l'erreur enregistré. Sans cette information, votre question est vague.
  • pouvez-vous ajouter un mondial ExceptionLogger pour vous connecter à l'exception réelle qui se passe sur le serveur live? Vous pouvez trouver des infos sur comment le faire ici: asp.net/web-api/overview/error-handling/...
  • c'est l'un des problème que j'ai je ne peux pas obtenir la complète exception
  • J'ai déjà un ExceptionHandler Attribut - je vais le poster dans la question
  • Il me semble que quelque chose se passe mal lors de la transformation de la POST parce que quelque chose n'a pas été configuré correctement. Apparemment, la mise en place EST en allant vers la droite pendant le traitement, la GET. Cela pourrait expliquer pourquoi vous devez d'abord faire unGET et seulement après que les POST réussit. Qui pourrait également expliquer pourquoi le POST échoue au bout de 12 à 13 heures (le pool d'applications est arrêté à l'époque). Êtes-vous sûr que vous avez configuré correctement toutes les dépendances?
  • Pouvez-vous partager le code du contrôleur?
  • Er, ceux que vous configurez avec Ninject?
  • Oui, vous pouvez voir le code dans le Démarrage.cs
  • S'il vous plaît, ajouter le code du contrôleur.
  • posté mais je ne vois pas comment cela aidera - comme avant de visiter l'URL de base: url.com - je ne peux même pas appeler la méthode POST - toutes les demandes sont bloquées avant que le contrôleur de l'action est encore frappé
  • Laissez-nous continuer cette discussion dans le chat.
  • la raison pour laquelle il n'est pas l'enregistrement de l'erreur 500 est parce que vous êtes à l'aide d'un ExceptionFilter qui est connu pour manquer quelques exceptions générées selon l'endroit où dans le pipeline, elle a été lancée. Essayez de mettre en œuvre une IExceptionLogger comme décrit dans asp.net/web-api/overview/error-handling/... et vous devriez commencer à voir l'erreur 500 connecté à votre fichier de log

InformationsquelleAutor Dawood Awan | 2016-03-31