2010-06-28 7 views
0

J'ai cette WebMethod qui redirige vers une autre page sur ce serveur.Rediriger une nouvelle page à partir du serveur

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
public static Boolean realizaConsulta(Dictionary<string, string> datos) 
{ 
    System.Web.HttpContext.Current.Response.Redirect("PRepConsulta.aspx", false); 
} 

Mais je reçois cette erreur:

Microsoft JScript runtime error: Sys.Net.WebServiceFailedException: The server method 'realizaConsulta' failed with the following error: System.InvalidOperationException-- Authentication failed.

Quelles sont les causes de cette erreur?


regarder les autres options que j'ai essayé:

 [WebMethod] 
     [ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
     public static Boolean realizaConsulta(Dictionary<string, string> datos) 
     { 
      System.Web.HttpContext.Current.Server.Execute("PRepConsulta.aspx", false); 
     } 

ÇA MARCHE, CAR, IL VA DE PRepConsulta.aspx ET SIGNER L'Undercode, MAIS LA PAGE JAMAIS apparaît.

J'ai aussi essayées:

 [WebMethod] 
     [ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
     public static Boolean realizaConsulta(Dictionary<string, string> datos) 
     { 
       HttpContext.Current.Server.Transfer("PRepConsulta.aspx", false); 
     } 

mais je m'y suis CETTE ERREUR:

Erreur d'exécution Microsoft JScript: Sys.Net.WebServiceFailedException: La méthode du serveur 'realizaConsulta' a échoué avec l'erreur suivante: Système .Threading.ThreadAbortException-- Subproceso anulado.

Je ne sais pas quoi faire d'autre ESSAYEZ

MERCI POUR TOUTE AIDE

+0

Quel est votre objectif pour appeler le WebMethod? Souhaitez-vous afficher du contenu supplémentaire ou envoyer l'utilisateur à une page appropriée en fonction des données que vous transmettez? Il est probablement préférable de simplement transmettre les données d'une chaîne de requête à une nouvelle page et de les rediriger à partir de là. –

Répondre

1

Je ne suis pas sûr de la « authentification a échoué » une partie, mais une Response.Redirect à l'intérieur d'un WebMethod va probablement casser le client SOAP qui appelle la méthode. Il s'attend à un booléen, pas à une redirection.

+0

Faute d'un meilleur endroit pour mettre cette réponse ... On dirait que vous ne dites pas au navigateur de rediriger. Cependant, vous avez câblé le JavaScript pour appeler le service Web, il l'appelle et reçoit autre chose qu'un booléen (ce qui est ce qu'il attend). Le contexte de l'appel SOAP au service Web est différent du contexte de la page Web sur laquelle vous recherchez. À aucun moment, le navigateur ne doit rediriger vers une autre page, mais il appelle simplement une méthode SOAP et reçoit une réponse inattendue. La logique de redirection est au mauvais endroit, fondamentalement. – David

+0

Le lien ne fonctionne plus. –

0

ok, im organiser va le flux de l'application:

de mon client, en javascript, im appeler un service web

PageMethods.realizaConsulta (Datos);

dans mon codebehind je dois exécuter le pageMethod et appeler une autre page

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
public static Boolean realizaConsulta(Dictionary<string, string> datos) 
{ 

    clsGeneral consulta; 
    DataTable dtTemp = new DataTable(); 

    using (consulta = new clsGeneral("SQLConn")) 
    { 
     consulta.consultaPrograma(ref dtTemp, datos["Codigo"], Int16.Parse(datos["Cod_Actividad"]), Int16.Parse(datos["Cod_SubActividad"]), datos["FechaIni"], datos["FechaFin"]); 
     HttpContext.Current.Session["Consulta"] = dtTemp; 

    //THIS ARE THE 3 DIFFERENT WAYS I HAVE TRIED TO CALL THE PRepConsulta.aspx, 
    //I DONT KNOW IF THERE IS A BETTHER WAY TO DO IT 

    //System.Web.HttpContext.Current.Response.Redirect("PRepConsulta.aspx", false); 
    //HttpContext.Current.Server.Transfer("PRepConsulta.aspx", false); 
    //System.Web.HttpContext.Current.Server.Execute("PRepConsulta.aspx",writer, false); 
    } 
    return true; 
} 

MERCI

+0

La redirection est vraiment juste au mauvais endroit dans cette conception. Si l'utilisateur est toujours redirigé vers l'autre page, vous souhaiterez probablement: 1) Rediriger l'utilisateur du JavaScript vers une nouvelle page et appeler cette logique sur le chargement de cette page; 2) Placez la redirection dans le JavaScript après l'appel de ce WebMethod renvoie.Mettre la redirection dans le WebMethod ne dit pas au navigateur de rediriger, il casse juste la valeur de retour. – David

+0

Eh bien, c'est comme ça que je l'ai fait au début, j'appelais le webMethod et après cela, j'appelais la nouvelle page par la fonction window.open, mais, quand j'ai téléchargé le projet dans le serveur, j'ai réalisé que la fenêtre s'ouvre avant la fin de webMethod. Le webMethod exécute une requête et je garde le résultat dans une variable de session, et je l'utilise dans la fenêtre que j'ouvre ensuite. C'est pourquoi j'ai essayé d'ouvrir la fenêtre depuis le serveur, parce que je dois être sûr que la requête a déjà été exécutée et que le résultat est dans ma variable de session. – ingrid

+0

On dirait que vous appelez WebMethod de manière asynchrone. Il existe sûrement un moyen d'attendre le retour, de vérifier la valeur et de répondre en conséquence (avec une redirection ou un message d'erreur). De plus, y a-t-il une raison particulière pour laquelle WebMethod est appelé via JavaScript en premier lieu? Il semble y avoir une plus grande image influençant cette conception qui n'est pas claire ici. – David

Questions connexes