2010-01-18 3 views
2

J'ai un service Web .net qui prend des données xml. À partir du service Web, je souhaite manipuler les données, puis appeler une page Web qui affiche les informations à l'attention de l'utilisateur. Le service Web doit revenir après avoir étendu la page Web.Redirection vers une page Web à partir d'un appel de service Web

Je n'ai pas de chance de le faire.

J'ai essayé Server.Transfer (url, end); Qui génère l'exception depuis que mon retour a été saccagé avec le transfert: Le type de contenu de réponse du client a été trouvé 'text/html; charset = utf-8 ', mais attendu' text/xml '.

J'ai également essayé Context.Response.Redirect (url, end); qui génèrent une exception 302 (objet déplacé).

J'ai vu diverses descentes sur la façon de gérer l'erreur 302. Cependant je n'ai pas de contrôle sur le client. Dans ce cas, mon service sera appelé à partir d'une application Java, donc je ne peux pas encapsuler l'appel côté client avant d'effectuer l'appel du service Web. Je dois le faire depuis l'asmx.

// this is very basic but the general gist 
[WebMethod] 
public string MyRequest(string someXML) 
{ 
    // process the xml, dump do database, invoke aspx page 

    string url = "xxxx.aspx"; 
    bool end = false; 

    Server.Transfer(url, end); 
    //this.Context.Response.Redirect(url, end); 

    return "<retcode>somecode</retcode>"; 
} 

J'ai cherché des exemples de cette situation ou un moyen d'appeler asyncrounously la page Web à partir du service et le retour. Quelqu'un peut-il me diriger vers ce modèle ou un exemple?

Merci

Mike

Répondre

3

Malheureusement, si vous n'avez aucun contrôle sur l'application client, cela ne sera pas possible. Pensez-y à partir de la fin de l'application client.

Les services Web (je suppose que SOAP dans ce cas) vont sur http pour plus de commodité, mais ce sont en réalité des appels de données, ce ne sont pas des pages web. En tant que tel, il n'y a aucune obligation pour l'application cliente d'honorer une redirection vers un site Web, ce qui est en fait un saut de protocole. Je suppose que la plupart des bibliothèques SOAP suivraient une redirection 302 sous l'hypothèse que le service de données qu'ils tentent d'appeler a bougé, s'attendant toujours à trouver le service de données sur le nouvel URI. En supposant également que le client est une sorte d'application (c.-à-d., Pas javascript s'exécutant dans un navigateur), il ne peut même pas rendre une page web, il faudrait donc lancer un navigateur. Si vous ne contrôlez pas le client, mais que vous contrôlez le protocole/l'interface, vous pouvez définir un type de retour dans lequel vous attendez que les clients lancent un navigateur, mais il s'agit simplement de demander aux implémenteurs clients de fais ce que tu ne peux pas directement.

0

Vous ne pouvez pas faire cela parce que parce que le client attend une réponse XML (le point de l'ensemble d'un service Web). Vous ne pouvez pas forcer le client à faire quelque chose de complètement différent du côté serveur (c'est-à-dire ouvrir une application complètement nouvelle, étant le navigateur).
L'application cliente devra être changée. Si le service Web renvoie un message qui s'affiche à l'utilisateur, vous pouvez retourner quelque chose comme "Veuillez aller à [URL] pour voir les résultats" et espérer que l'utilisateur suive vos instructions.

Questions connexes