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?

Essayez de réglage de la réponse.BufferOutput = true;

OriginalL'auteur Saeed Neamati | 2011-12-18