我有一个 Web 应用程序,提供 JSON 的 WCF REST API 和 ASMX Web 服务。该应用程序已经存在几年了。它基于 ASP.NET 2.0,但几年前升级到 .NET 4.0,我刚刚升级到 .NET 4.5,以便能够使用新的异步框架。
应用程序背后是一些遗留服务,我意识到通过异步来提高性能有很大的潜力。我已经在整个应用程序中实现了异步,并且一切都通过 WCF REST API 完美运行。
我发现 ASMX API 失败时已经太晚了,我想要这样的方法:
[WebMethod(Description = "Takes an internal trip ID as parameter.")]
async public Task<Trip> GetTrip(int tripid)
{
var t = await Trip.GetTrip(tripid);
return t;
}
然后我了解到 ASMX 根本不支持 async/await,大家都建议迁移到 WCF。我对此不太高兴。 ASMX(实际上是其中三个)充满了不同的方法,并且我们希望继续通过旧 API 提供大量 API 使用者的服务。
但我们需要提高性能!有谁知道解决方法,以便我可以继续在 ASMX 后面使用 async/await,但像以前一样公开 ASMX?
也许可以这样做,但会有点尴尬。ASMX 支持 APM 风格的异步方法,你可以将 TAP 转换为 APM(但是,请注意该页面上的 MSDN 示例未正确传播异常)。
我的博客上有一个示例显示如何在 APM 中包装 TAP 实现(异常传播保留了正确的异常类型,但丢失了堆栈;请参阅ExceptionDispatchInfo完全正确的异常传播)。当 WCF 仅支持 APM 时,我使用过一段时间。非常相似的方法应该适用于 ASMX。
但请注意,您将必须以 4.5 为目标(即httpRuntime.targetFramework) for async/await按预期工作.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)