Response.Write() в WebService

Я хочу возвращать данные в формате JSON обратно клиенту в методе веб-службы. Один из способов - создать SoapExtension и использовать его в качестве атрибута в моем веб-методе и т.д. Другой способ - просто добавить атрибут [ScriptService] к веб-службе, и пусть .NET framework возвращает результат в виде {"d": "что-то"} JSON, обратно пользователю (d здесь является чем-то вне моего контроля). Однако я хочу вернуть что-то вроде:

{"message": "action was successful!"}

Простейшим подходом может быть написание веб-метода типа:

[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!\"}}");
    }
}

Таким образом, на клиенте я получу:

{ "message": "action was successful!"} { "d": null}

Что означает, что ASP.NET добавляет свой результат успеха к моему результату JSON. С другой стороны, если я промою ответ после записи сообщения об успехе (например, response.Flush();), произойдет исключение, которое гласит:

Сервер не может очистить заголовки после отправки HTTP-заголовков.

Итак, что делать, чтобы просто получить мой JSON результат, не меняя подход?

9
задан Saeed Neamati 18 December 2011 в 07:54
поделиться