我有一个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 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.
原文地址:https://www.jb51.cc/csharp/95397.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。