Frage

habe ich ein System.Web.Services.WebService mehrere WebMethods enthält. Wenn eines dieser WebMethods eine Ausnahme auslöst, möchte ich die Werte in diesem WebMethod weitergegeben loggt sein. Ich möchte dies in einer Art und Weise behandeln, die allgemein genug ist, dass ich die gleiche Methode verwenden kann, unabhängig von der Anzahl oder Art der Parameter. Ich dachte, ich würde das rohe JSON einzuloggen, aber ich bin nicht in der Lage zu bestimmen, wie es zuzugreifen. Ich habe die ganze Context.Request Objekt (einschließlich der InputStream Eigenschaft) durchsucht, ohne es zu finden.

Hier ist, was würde ich tun:

[WebMethod(EnableSession = true)]
public IEnumerable MyWebMethod(int a, string b)
{
    try
    {
      //do something
    }
    catch (Exception e)
    {
      LogException(e, this.Context);
      throw;
    }
}

//All WebMethods should be able to call LogExceoption regardless of param type/count
protected void LogException(Exception ex, HttpContext context)
{
  string parameters = context.Request. //?? i don't know how to get to the JSON
  //write exception detail to log
}

Ich bin mit C # mit .NET Framework 3.5

War es hilfreich?

Lösung

Hier ist, wie die rohe JSON zuzugreifen:

protected void LogException(Exception ex, HttpContext context)
{
    context.Request.InputStream.Position = 0;
    string rawJson = null;
    using (StreamReader reader = new StreamReader(context.Request.InputStream))
    {
        rawJson = reader.ReadToEnd();
    }
    //write exception detail to log
}

Andere Tipps

Siehe auch: http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension(VS.71).aspx

Siehe TraceExtension, im Beispiel. Es kümmert sich um alle Web-Methoden und protokolliert die Ergebnisse in einer Datei. Sollte einfach, dass auf Ihre Bedürfnisse anzupassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top