我可以在为每个线程设置 http 标头的同时跨 webrequests 重用 JsonServiceClient

Posted

技术标签:

【中文标题】我可以在为每个线程设置 http 标头的同时跨 webrequests 重用 JsonServiceClient【英文标题】:Can I reuse a JsonServiceClient across webrequests while setting http header per thread 【发布时间】:2018-08-28 05:44:53 【问题描述】:

我们正在基于 servicestack 框架创建一系列 dotnet core 2.0 微服务。我们想使用基于 http-header 的相关令牌,因此我们可以在分布式日志系统 (Seq) 中跟踪请求。

出于性能原因,我们想使用 IoC 设置一个包含线程安全 JsonServiceClient 的类,但是我们如何确保放置在一个线程上的标头不会泄漏到另一个并发请求中?客户端代码示例:

public TResponse Get(IReturn requestDto)

...

_serviceClient.AddHeader("r-id", theReqId); // 我们如何才能使这些只针对线程请求?

var responseFromDownstreamService = _serviceClient.Get(requestDto);

【问题讨论】:

【参考方案1】:

如果您正在修改服务客户端实例,则依赖项需要是瞬态的,以便每个线程接收一个新实例,它们可以在不修改其他线程使用的相同实例的情况下进行变异。

【讨论】:

但这是一种避免每个线程有一个实例的方法 - 是否可以在特定的 Get/Post/Delete 调用上添加标头而不影响其他线程? @MarkusFoss 没有共享实例没有这个属性

以上是关于我可以在为每个线程设置 http 标头的同时跨 webrequests 重用 JsonServiceClient的主要内容,如果未能解决你的问题,请参考以下文章

修改每个请求的请求标头 C# HttpClient PCL

是否跨浏览器选项卡共享 http 标头?

JavaScript 可以设置哪些 HTTP 标头?

什么决定了同时连接的数量

IIS下配置跨域设置Access-Control-Allow-Origin

无法从前端 JavaScript 访问跨域响应标头