Bonjour à tous,
Mes débuts en Asp Mvc sont douloureux, et mon premier souci ne trouve aucune solution sur le net (et ce n’est pas faute d’avoir cherché).

Le contexte est le suivant :

Dans le Get de l’action Index de mon HomeControler, je m’abonne à un évènement qui sera lancé dans le callback d’un proxy WCF. Jusque là, pas de soucis. Au catch de l’événement, je veux lancer une redirection vers une autre action de mon contrôleur, et là c’est le drame, il me sort une NullReferenceException.
La stackTrace
à System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
à System.Web.Hosting.IIS7WorkerRequest.GetServerVariableInternal(String name)
à System.Web.Hosting.IIS7WorkerRequest.GetServerVariable(String name)
à System.Web.Hosting.IIS7WorkerRequest.GetRemoteAddress()
à System.Web.HttpRequest.get_IsLocal()
à System.Web.Configuration.CustomErrorsSection.CustomErrorsEnabled(HttpRequest request)
à System.Web.HttpContextWrapper.get_IsCustomErrorEnabled()
à System.Web.Mvc.HandleErrorAttribute.OnException(ExceptionContext filterContext)
à System.Web.Mvc.ControllerActionInvoker.InvokeExceptionFilters(ControllerContext controllerContext, IList`1 filters, Exception exception)
à System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
à MvcWcfTest.Controllers.HomeController.CallbackSoumissionsRecues(Object sender, SoumissionsEventArgs e) dans C:\XXX\Controllers\HomeController.cs:ligne 171
à MvcWcfTest.Controllers.CallbackHandler.NotificationListSoumissions(TOSoumission[] soumissions) dans C:\XXX\Controllers\HomeController.cs:ligne 74
à SyncInvokeNotificationListSoumissions(Object , Object[] , Object[] )
à System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
à System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
Et un bout de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
       public ActionResult Index()
        {
            [...]
 
            if (GlobalRepository.ServiceClient == null)
            {
                CallbackHandler callback = new CallbackHandler();
                InstanceContext context = new InstanceContext(callback);
                GridServiceClient client = new GridServiceClient(context);
 
                callback.ConnexionDuClient += CallBackCLientConnecte;
                callback.SoumissionsRecues += CallbackSoumissionsRecues;
 
                GlobalRepository.ServiceClient = client;
 
                client.Connexion(TypeClient.Monitoring, Environment.UserName); 
            }
 
            [...]
 
            return View();
        }
 
        void CallBackCLientConnecte(object sender, ConnexionEventArgs e)
        {
            if (e.Connexion)
            {
                GridServiceClient client = GlobalRepository.ServiceClient;
 
                client.RecupererSoumissions();
            }
            else
            {
                [...]
            }
        }
 
        void CallbackSoumissionsRecues(object sender, SoumissionsEventArgs e)
        {
            GlobalRepository.Soumissions = e.Soumissions;
 
            // C’est là que ça plante...
            ActionInvoker.InvokeAction(ControllerContext, "RedirigerVersIndex");
        }
 
        public ActionResult RedirigerVersIndex()
        {
            return RedirectToAction("Index");
        }

J’ai l’impression que le souci vient de IIS, mais si je lance mon appli avec le serveur de dev de Visual Studio, j’obtiens également une NullReferenceException (avec une stackTrace différente par contre).

J’avoue ne pas savoir comment résoudre, ni même contourner le souci.
J’en appel donc à votre savoir ^^

(Au passage, je n’ai jamais fait d’asp.net, donc s’il y a d’autre façon de procéder, je suis preneur... sachant que je ne peux pas modifier le service WCF qui est utilisé par plusieurs clients lourds).

D’avance merci.