我在高流量场景中有一个多层C#MVC4 Web应用程序,它使用依赖注入来处理各种存储库.这非常有用,因为它易于测试,在生产中我们可以轻松配置特定控制器的存储库.所有控制器都继承自AsyncController,因此返回Task<JsonResult>或Task<ActionResult>真正帮助我们的服务器的操作方法可以扩展到更多用户并解决可怕的线程饥饿问题.一些存储库使用Web服务,我们绝对可以使用Async/Await来提供可伸缩性优势.在其他情况下,有些可能会使用无法安全线程的非托管服务,其中async/await将不会带来任何好处.每个存储库都是一个接口IRepository的实现.简而言之,每种实现方式在获取数据方面都有很大差异.在部署时使用web.config更改和Autofac模块选择此配置.
在这样的应用程序中实现async/await的一些推荐方法是什么?为了使模式适合我现有的应用程序,我必须更改接口以返回Task<MyBusinessObject>. 但这不是一个实现细节吗? 我可以提供两个方法存根,GetData和GetDataAsync,但对我来说,不会允许灵活性我现在有IoC框架类似Autofac在那里我可以一切轻松更换,而无需更改代码.
Async/Await的一位微软开发人员发布了一篇博文," 我应该为我的同步方法公开一个异步包装器吗? ",这种问题就出现了.如果您的异步方法不是真正的异步(提供本机I/O好处),那么它实际上只会增加开销.换句话说,它不会提供任何可扩展性优势.
我只是想社区的其他成员如何解决这个问题.
我正在成功使用IIS URL重写模块用于已知的文件扩展名(.aspx,.html等)但是,如何将IIS URL重写模块用于没有扩展名的请求或不存在的文件?
例如:
http://www.example.com/products
应该重定向到我的重写映射中的URL.
我已经尝试将其放入我的重写映射中,但我从IIS获得了404.4"No Handler Specified"错误.