gpt4 book ai didi

调用异步方法的 C# Webservice : Webmethod,,返回 Taskoff 对象

转载 作者:行者123 更新时间:2023-11-30 21:50:45 24 4
gpt4 key购买 nike

我是网络服务的初学者,我遇到了以下问题与 Web 服务和异步日志记录有关。 (c#)

问题描述

我有一个网络服务,可以将一些数据返回给客户端(asp.net 网站)。

[WebMethod]
public MyClass getData()
{
//Do some work
return _myClassObject;
}

到目前为止,这效果很好。

因为我想知道 Web 服务发布后发生了什么,所以我尝试实现一些简单的日志记录。

以下类(简化)处理日志记录:

public static class Logwriter
{
public static void writeToLog(string txt)
{
//writes log to db
}
}

我希望这是异步发生的,这样就不会减慢网络服务的速度。

因此我更改了 WebMethod:

[WebMethod]
public async Task<MyClass> getData()
{
await Task.Run(() => Logwriter.writeToLog("Someone requested the WebMethod 'GetData'"));
//Do some work
return _myClassObject;
}

在我更新了我的 asp.net 网站上的 ServiceReference 后,我注意到网络服务器不再返回“MyClass”对象,而是返回“TaskOffCustomClass”对象。我还没有找到从“TaskOffMyClass”对象获取“MyClass”对象的解决方案。

问题

  1. 如何从“TaskOffMyClass”获取“MyClass”对象?

  2. 是否有可能异步进行日志记录并仍然返回“MyClass”对象? (使用任务时)

  3. 我想过在线程中进行日志记录,但我也读到它是 recommended使用任务而不是线程。切换到 Thread 的影响有多严重?

最佳答案

I'm a total beginner with webservices

我建议你学习一个现代框架。我什至不知道 ASMX 现在有多大了......根据我所能找到的,它“没有死”,但我认为这与 Silverlight 是同一种“没有死”。换句话说,它已经死了,但他们不想正式说它已经死了。

特别是,我认为 ASMX 根本不理解异步或任务。我强烈建议学习 ASP.NET WebAPI(或者 WCF,如果您确实想要 SOAP)。

但是,如果您有需要维护的现有 Web 方法,那么...

首先要意识到 - 如 Crowcoder pointed out - 您可能不想“一劳永逸”。如果它工作得足够好,那么就保持这样:

[WebMethod]
public MyClass getData()
{
Logwriter.writeToLog("Someone requested the WebMethod 'GetData'");
//Do some work
return _myClassObject;
}

如果您认识到并接受不 protected 后台操作的缺点(具体来说,它们可以在没有任何方式让您检测到的情况下中止,这意味着您的日志可能会丢失一些消息),那么您可以使用类似 HostingEnvironment.QueueBackgroundWorkItem:

[WebMethod]
public MyClass getData()
{
HostingEnvironment.QueueBackgroundWorkItem(() => Logwriter.writeToLog("Someone requested the WebMethod 'GetData'"));
//Do some work
return _myClassObject;
}

我有 alternative approaches 的描述在我的博客上。

关于调用异步方法的 C# Webservice : Webmethod,,返回 Taskoff 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36181107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com