Ich bin ein totaler Anfänger mit Webservices und ich lief in das folgende Problem, das über einen Webservice und asynchrone Protokollierung ist. (C#)C# Webservice: Webmethod, das eine async Methode aufruft, gibt das Taskoff Objekt zurück
Problem Beschreibung
Ich habe einen Webservice, der einige Daten an einen Client (asp.net Website) zurückgibt.
[WebMethod]
public MyClass getData()
{
//Do some work
return _myClassObject;
}
Das funktioniert bisher ziemlich gut.
Da ich wissen möchte, was auf dem Webservice passiert, sobald es veröffentlicht wird, habe ich versucht, einige einfache Protokollierung zu implementieren.
Die folgende Klasse (vereinfacht) übernimmt die Protokollierung:
public static class Logwriter
{
public static void writeToLog(string txt)
{
//writes log to db
}
}
Ich möchte diese asynchron geschehen, so wird es auf den Webdienst nicht verlangsamen.
Deshalb änderte ich das WebMethod:
[WebMethod]
public async Task<MyClass> getData()
{
await Task.Run(() => Logwriter.writeToLog("Someone requested the WebMethod 'GetData'"));
//Do some work
return _myClassObject;
}
Nachdem ich das Servicereference auf meiner asp.net Website aktualisiert ich, dass der Webserver nicht mehr bemerkt, eine „MyClass“ -Objekt zurückgibt, sondern eine „TaskOffCustomClass“ -Objekt . Ich habe noch keine Lösung gefunden, um das "MyClass" -Objekt vom "TaskOffMyClass" -Objekt zu bekommen.
Fragen
Wie kann ich meine "MyClass" Objekt von "TaskOffMyClass" erhalten?
Gibt es eine Möglichkeit, die asynchrone Protokollierung durchzuführen und immer noch ein "MyClass" -Objekt zurückgeben? (während Task)
Ich dachte über die Protokollierung in einem Thread, aber ich lese auch, dass es recommended Task over Thread verwenden. Wie schlimm wäre der Wechsel zu Thread?
'async' und' erwarten' funktionieren nicht so, wie Sie zu denken scheinen. Alles, was Sie in Ihrem obigen Code getan haben, ist, dass ein Teil davon in einem anderen Thread ausgeführt wird, aber warten Sie *, bis dieser Thread fertig ist, bevor der ursprüngliche Thread fortgesetzt wird. Ich schlage vor, dass Sie mehr Zeit damit verbringen, etwas über "Async" und "Warten" zu lernen. Eric Lipperts Blog hatte eine gute Anzahl von Artikeln, die es erklärten. –
Hi @Damien_The_Unbliever, danke für deinen Kommentar. Ich werde auf jeden Fall einen Blick auf Eric Lipperts Blog werfen. – Martin