加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 有没有办法处理async /等待ASMX服务?

发布时间:2020-12-15 06:31:31 所属栏目:百科 来源:网络整理
导读:我有一个Web应用程序为 JSON和ASMX Web服务提供WCF REST API.该应用程序已经存在了几年.它基于ASP.NET 2.0,但几年前升级到.NET 4.0,我刚刚升级到.NET 4.5,以便能够使用新的异步框架. 应用程序背后是一些传统服务,我意识到通过异步增加性能有很大的潜力.我通
我有一个Web应用程序为 JSON和ASMX Web服务提供WCF REST API.该应用程序已经存在了几年.它基于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后面,但暴露ASMX如前所述?

解决方法

可能这样做,但这会有点尴尬. ASMX supports APM-style asynchronous methods,您可以 convert TAP to APM(但是请注意,该页面上的MSDN示例不正确传播异常).

我的博客上有一个示例,显示how to wrap TAP implementations in APM(传播异常,保留正确的异常类型,但丢失堆栈;请参阅ExceptionDispatchInfo进行完全正确的异常传播). WCF只支持APM,我用了一段时间.一个非常类似的方法应该适用于ASMX.

但是,请注意,你将have to target 4.5 (i.e.,httpRuntime.targetFramework) for async/await to work as expected.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读