2015-03-27 2 views
0

Je manque d'options quant à ce que cela pourrait être, d'où ma question ici. J'ai un grand site Web de type tableau de bord dans mon entreprise.La même version ne fonctionne pas dans 2 environnements identiques

  • La construction fonctionne sur l'environnement de développement.
  • La génération est déployée dans un environnement de développement et un environnement de production
  • Les 2 environnements sont identiques au niveau du système d'exploitation et du correctif.
  • Les 100% sont semblables base de code complet déployé sur les deux serveurs (comme cela est déployé à travers TeamCity et la construction est promu de dev à prod.)
  • Ive a changé web.config sur prod d'utiliser les mêmes connectionStrings (afin que les questions DB pourraient être exclues)
  • Les applicationPools sont également identiques à 100% - NET 4 - intégré

La partie qui échoue est un modèle qui obtient ses données à partir d'une table SQL, mais apparemment les retours null (sur l'environnement de production, PAS sur l'environnement de développement)

Il est seulement 1 vue avec un certain modèle qui échoue avec une exception de référence nulle, et seulement sur le serveur de production, tout le reste fonctionne bien, toutes les connexions sont bien - rien.

Une version antérieure sur les serveurs de production fonctionne très bien (aucune erreur) et rien n'a été modifié sur le site où réside l'erreur.

Toute personne ayant de bonnes idées?

J'ai du mal à croire que cela pourrait être un problème de codage. Mais à mon avis, les développeurs sont ceux qui ont le plus d'expérience avec ce genre de chose, d'où moi posant cette question ici.

Je ne peux pas, pour la vie de moi comprendre ce qui pourrait être laissé pour moi d'essayer.

NB: La ligne qui échoue est

@if (Model.ShowTsm && Model.ShowCv) 

avec: objet de référence non définie à une instance d'un objet.

Le stacktrace:

System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +279 
    System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +125 
    System.Web.WebPages.StartPage.ExecutePageHierarchy() +142 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +180 
    System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +383 
    System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() +32 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +970660 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +265 
    System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +956732 
    System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +28 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +20 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +67 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +20 
    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +53 
    System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +42 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +20 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +53 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +469 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375 
+0

Avez-vous les mêmes versions de SQL Server dans les deux environnements? J'ai juste eu ce problème hier. En dev, j'avais SQL 2012 et prod était SQL 2008R2. – tgolisch

+0

Malheureusement, j'ai essayé de connecter les deux à la même DB - problème persiste. – VisualBean

+0

Le pool d'applications s'exécute-t-il sous un compte d'ordinateur ou un compte d'utilisateur? – tgolisch

Répondre

1

J'ai vu les développeurs ajouter un peu de code plutôt "intelligent" avant. Il y a plusieurs choses que vous devrez éliminer. Je veux juste confirmer, quand vous dites "chaîne de connexion identique", que la chaîne de connexion utilise un nom d'utilisateur et mot de passe et pas "sécurité intégrée". Parce que ce n'est pas identique. Si vous utilisez un nom d'utilisateur et un mot de passe, passez au paragraphe suivant.

Deuxième chose à essayer: Déterminez si le code envoie différents appels de base de données, en fonction du nom de l'hôte (serveur). Utilisez "profileur SQL" pour renifler (espionner) les appels à la base de données au cours de l'erreur. Ouvrez SSMS (SQL Server Management Studio), (menu) Outils, SQL Server Profiler, connectez-vous à votre base de données (celle à laquelle les deux serveurs sont en train de parler). Sur l'écran "Trace Properties", "Use the template" TSQL. (Si cela ne montre pas grand chose, passez au template TSQL_SPs). [ Courir ]. Pause immédiatement.Utilisez votre application jusqu'à ce que vous soyez presque à la partie qui échoue (et puis sans pause). Observez les appels qui passent de dev vs prod. Je ne peux pas vous dire exactement ce qu'il faut rechercher, autre que des différences majeures dans les paramètres ou les commandes SQL.

Troisième (et moins probable). Il y a des propriétés de connexion SQL qui peuvent être configurées sur n'importe quelle machine, qui ne sont pas évidentes (ou semblent cachées). Vous pouvez utiliser le "Gestionnaire de configuration du serveur SQL (OS: menu Démarrer, Tous les programmes, SQL Server 2008, Outils de configuration, Gestionnaire de configuration du serveur Sql) .S'il n'est pas dans votre menu Démarrer, vous devrez peut-être obtenir le disque d'installation. "SQL Client Tools" Vérifiez les éventuels alias Assurez-vous que vous utilisez les mêmes protocoles

Autres choses (très peu probable): 1) Vous pouvez utiliser un profileur de mémoire pour voir ce qui est chargé en mémoire. ont utilisé quelques outils wierd pour voir quelles DLL sont en mémoire et leurs versions 2) Si vos développeurs étaient nés avant les années 90, ils pourraient être assez fous pour définir des valeurs dans le registre ou dans un fichier hosts/lmhosts. Si aucune d'entre elles ne vous aide, faites le moi savoir, j'ai plus d'idées, mais chacune est plus obscure. em est affecté par quelque chose dans la connexion (identité) ou les paramètres qui peuvent être observés dans les appels DB.

Vos développeurs sont-ils toujours là pour demander ou s'agit-il d'un code existant?

+0

ConnectionStrings sont avec Username/pw - Même appels DB - aucun code n'a été ajouté à cette vue/contrôleur particulier depuis la dernière construction (qui fonctionne sur dev et prod) - La chose étrange à propos de c'est ça; R: Rien n'a été changé dans cette partie du site. B: La construction plus ancienne fonctionne. C: Fonctionne en Dev mais pas Prod. - N'hésitez pas à ajouter vos pensées sur ce que cela pourrait être. – VisualBean