Réponse.Write() dans WebService
Je veux retourner les données JSON vers le client, dans ma méthode de service web. Une façon est de créer SoapExtension
et l'utiliser comme attribut sur ma méthode web, etc. Une autre façon est de simplement ajouter [ScriptService]
attribut pour le service web, et de les laisser .NET framework retourner le résultat en {"d": "something"}
JSON, à l'utilisateur (d
ici quelque chose hors de mon contrôle). Cependant, je veux retourner quelque chose comme:
{"message": "action was successful!"}
L'approche la plus simple pourrait être d'écrire une méthode web comme:
[WebMethod]
public static void StopSite(int siteId)
{
HttpResponse response = HttpContext.Current.Response;
try
{
//Doing something here
response.Write("{{\"message\": \"action was successful!\"}}");
}
catch (Exception ex)
{
response.StatusCode = 500;
response.Write("{{\"message\": \"action failed!\"}}");
}
}
De cette façon, ce que je vais obtenir au client est:
{ "message": "action was successful!"} { "d": null}
Ce qui signifie que ASP.NET est apposant sa réussite résultat de mon résultat JSON. En revanche, si je tire la chasse, la réponse après avoir écrit le message de succès, (comme response.Flush();
), l'exception qui arrive et qui dit:
Serveur ne peuvent pas effacer les en-têtes après les en-têtes HTTP ont été envoyés.
Alors, que faire pour viens d'obtenir mon résultat JSON, sans changement de l'approche?
OriginalL'auteur Saeed Neamati | 2011-12-18
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne pour moi:
ResponseEnd() cause “Thread a été interrompue”, Cela fonctionne pour moi! HttpContext.Actuel.Réponse.Flush(); HttpContext.Actuel.Réponse.SuppressContent = true; HttpContext.Actuel.ApplicationInstance.CompleteRequest(); stackoverflow.com/questions/20988445/...
OriginalL'auteur Sevin7
Pourquoi ne pas vous retourner un objet, puis dans votre client vous pouvez l'appeler comme
response.d
?Je ne sais pas comment vous appelez votre Service Web, mais j'ai fait un exemple en faisant certaines hypothèses:
J'ai pris cette exemple à l'aide de jquery ajax
Et votre code pourrait ressembler à ceci (vous devez autoriser le service web pour être appelé à partir d'un script en premier: '[Système.Web.Script.Services.ScriptService]'):
Dans cet exemple j'ai utilisé le dictionnaire, mais vous pouvez utiliser n'importe quel objet avec un champ "message", par exemple.
Je suis désolé si je missunderstood ce que vous voulez dire mais je ne comprends vraiment pas pourquoi vous voulez faire une " réponse.l'écriture de " chose.
Espère que j'ai aidé au moins. 🙂
OriginalL'auteur Jenninha