C# 如何使用WebRequest和WebResponse使用缓存控制?
想象一下微服务体系结构中的许多服务。服务A从服务B请求响应,服务B将C# 如何使用WebRequest和WebResponse使用缓存控制?,c#,.net,asp.net-web-api,microservices,C#,.net,Asp.net Web Api,Microservices,想象一下微服务体系结构中的许多服务。服务A从服务B请求响应,服务B将缓存控制标题设置为公共,最大年龄=78261 是否有一种.NET方法可以处理请求的对象和某种“缓存”对象 人们可能认为在WebResponse或HttpWebResponse类中应该/将会有一个Cache属性,与Cache控件头接口 是否真的有必要解析缓存控制字符串、查找值并手动实现对标头的支持?服务B表示,如果您通过CDN(边缘缓存)转发请求,则其数据可以缓存在任何位置,例如任何下游代理服务器上。然后,对服务B的后续请求将由边
缓存控制
标题设置为公共,最大年龄=78261
是否有一种.NET方法可以处理请求的对象和某种“缓存”对象
人们可能认为在WebResponse
或HttpWebResponse
类中应该/将会有一个Cache
属性,与Cache控件
头接口
是否真的有必要解析
缓存控制
字符串、查找值并手动实现对标头的支持?服务B表示,如果您通过CDN(边缘缓存)转发请求,则其数据可以缓存在任何位置,例如任何下游代理服务器上。然后,对服务B的后续请求将由边缘缓存完成,并且不会在源位置执行代码来检索下一个请求的数据
这应该与服务A的关注点分开考虑,服务A可能希望在向服务B发出另一个请求之前将响应数据缓存一段时间
您希望最大限度地降低进程间通信的成本(HTTP调用、服务A->服务B)以及所需的序列化/反序列化工作
这里的一种常见模式是直通式缓存,其中服务A将检查来自某个操作的缓存响应,然后再决定回调服务B(它仍然可以使用边缘缓存数据进行响应)
服务A应该决定它的缓存策略,在基于实例的MemoryCache或共享缓存(例如Redis)中缓存响应的时间。服务B可能正在返回有关某个有用对象的数据,因为它的内容以某种形式序列化—“A”应该反序列化并缓存此响应
我会将这些服务的缓存要求分开,不要使用最大年龄值来决定在服务A中缓存响应的时间。这将在服务之间引入耦合-如果服务B的设计者更改了最大年龄值,那么这将影响服务A的行为
相反,请为服务a设置一个配置值,该值定义缓存来自服务B的响应的时间长度,并使用该值来设计直通式缓存实现。将来自服务B的反序列化响应在缓存中存储一段时间
NB-我引用了来自和的图像 服务B表示它的数据可以缓存在任何地方,例如,如果您通过CDN(边缘缓存)转发请求,则可以缓存在任何下游代理服务器上。然后,对服务B的后续请求将由边缘缓存完成,并且不会在源位置执行代码来检索下一个请求的数据 这应该与服务A的关注点分开考虑,服务A可能希望在向服务B发出另一个请求之前将响应数据缓存一段时间 您希望最大限度地降低进程间通信的成本(HTTP调用、服务A->服务B)以及所需的序列化/反序列化工作 这里的一种常见模式是直通式缓存,其中服务A将检查来自某个操作的缓存响应,然后再决定回调服务B(它仍然可以使用边缘缓存数据进行响应) 服务A应该决定它的缓存策略,在基于实例的MemoryCache或共享缓存(例如Redis)中缓存响应的时间。服务B可能正在返回有关某个有用对象的数据,因为它的内容以某种形式序列化—“A”应该反序列化并缓存此响应 我会将这些服务的缓存要求分开,不要使用最大年龄值来决定在服务A中缓存响应的时间。这将在服务之间引入耦合-如果服务B的设计者更改了最大年龄值,那么这将影响服务A的行为 相反,请为服务a设置一个配置值,该值定义缓存来自服务B的响应的时间长度,并使用该值来设计直通式缓存实现。将来自服务B的反序列化响应在缓存中存储一段时间
NB-我引用了来自和的图像 +1详细回答,但我不确定它是否解决了这个问题。在回答中,您假设“客户机”将使用
foo
,而服务A
是一个代理。但事实并非如此<代码>服务A需要在不干扰或不与任何客户端交互的情况下消耗服务B
中的资源。客户端将使用服务A
中的资源,但不知道Foo
,而是使用与Foo
相关但类型不同的Bar
。没有客户端干扰的通信。我在问服务A
将如何在从服务B
检索的对象上使用缓存控制。我假设服务A和服务B之间进行直接HTTP通信,但突出显示web代理将遵守您设置的缓存头的方式。我还试图证明它们应该被视为独立的东西——服务B的缓存控制头应该只用于HTTP缓存的预期目的,服务A不应该使用该值,否则会在服务之间引入耦合。我的建议是不要在Service-A中的缓存逻辑中使用缓存控制头,让Service-A维护一个指示这一点的配置值,而不是ServiceBAlright,因此基本上您关于如何在Service-to-Service体系结构中使用缓存控制的答案是:不要+1详细的回答,但我不确定它是否解决了这个问题。在您的回答中,您假设“客户”