我在IIS上托管了WCF服务。响应的大小非常大,因此我需要在IIS端启用动态数据压缩(服务使用wsHttpBinding)。
在某些时候我意识到我也需要缓存压缩数据。每个对服务器的请求都是唯一的,但只返回少数可能值中的一个。这意味着我无法使用IIS缓存,因为每个请求都不同。另一方面,我无法使用WCF缓存,因为它对IIS压缩一无所知,因此我们必须反复重新压缩缓存数据。
有没有办法使用WCF / .net代码中的IIS压缩数据缓存?还有其他已知的解决方案吗?
答案 0 :(得分:2)
请阅读文章:http://www.codeproject.com/Articles/53718/Extending-WCF-Part-II。希望这对你有所帮助。
答案 1 :(得分:2)
鉴于您说您的有效负载很大,我会假设额外的往返行程会增加可忽略的延迟。因此,我建议您充分利用您使用HTTP的事实。
编写一个检测到您在HTTP上的服务行为。然后,一旦确定要“返回”哪个大对象,就会拦截返回调用,并将其替换为HttpContext.Response.Redirect()
。
然后编写一个单独的服务来托管ACTUAL结果为HTTP GET
并带有确定性网址。
您将获得的优势。
此处描述的模式是HTTP重定向到Canonical URL。
Simples!
PS尝试使用303 redirect if possible
答案 2 :(得分:0)
您可以创建自己的缓存。创建引用Dictionary的静态只读字段。使用锁定块保护字典。在字典中存储从请求值(确定结果的请求中的值)到缓存ID的映射,其中缓存id是文件名,或查找文件的其他标识符。或者,如果在内存中,实际缓存的对象或blob。所有缓存的文件或blob都将被压缩,因此您无需这样做。
在这种情况下,您无法使用IIS压缩。