我有一个MVC 5应用程序,其中包含一个发出HTTP请求的控制器操作。 为此,我使用的是HttpClient。
我从其他人(例如此博客post)和我自己的经历中学到了什么 同时即时通知大量HttpClient会对应用程序的性能产生负面影响,而不仅仅是整个服务器的性能。
到目前为止,我重用HttpClient实例的要求可以通过像这样的代码来解决
$.post(
daten.ajaxurl,
{
"action": "createuser",
},
function(data){
alert(data)
}
)
在控制器动作中需要类似的重复使用,我选择使用
控制器类中的HttpClient的静态实例。问题是
传递给HttpClientHandler的凭据随着每个请求而改变
它们部分依赖于时间戳值(using (var handler = new HttpClientHandler() { Credentials = new NetworkCredential(getUsername(), getHashedPassword())})
using (var client = new HttpClient(handler))
{
// Long running loop that makes a different HTTP request
// on each iteration but using the same HttpClient instance
}
方法每次调用时都会产生不同的密码。)
由于在远程服务器上执行身份验证的方式,我必须在构成请求正文的XML内容中包含密码。
这就是我遇到问题的地方:
如何在对控制器操作的不同调用中重用相同的HttpClient实例,同时确保它是 使用具有最新凭据的处理程序?
甚至可以这样做吗?
是否可以在将处理程序传递给HttpInstance后更新处理程序?
或者我是否需要修改客户端对象的DefaultRequestHeaders,如果对象被不同的线程同时使用,根据某些来源可能会引入细微的错误?