鉴于.net HttpClient在设计时考虑了重用,并且意图存在很长时间,并且在短期实例中报告了内存泄漏.在为多个用户调用端点时,您希望使用不同的承载令牌(或任何授权标头)对给定端点进行静默呼叫的指南行是什么?
private void CallEndpoint(string resourceId, string bearerToken) {
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("bearer", bearerToken);
var response = await httpClient.GetAsync($"resource/{resourceid}");
}
Run Code Online (Sandbox Code Playgroud)
鉴于上述代码可以由Web应用程序上的任意数量的线程调用,第一行中设置的标头很可能与调用资源时使用的标头不同.
在不引起使用锁争用和维护无状态Web应用程序的情况下,为单个端点创建和部署HttpClients的建议方法是什么(我目前的做法是为每个端点创建一个客户端)?
生命周期
尽管HttpClient间接实现了IDisposable接口,但HttpClient的推荐用法并不是在每次请求后都将其处理掉.只要您的应用程序需要发出HTTP请求,HttpClient对象就会存在.在多个请求之间存在一个对象,可以设置一个用于设置DefaultRequestHeaders的地方,并且可以防止您在每次请求时重新指定CredentialCache和CookieContainer之类的内容,这是HttpWebRequest所必需的.
我对下面参数的绑定有问题.连接有效,因为我在不使用参数的情况下测试了它.但是,执行前查询的值仍然使用'@userName'而不是'jsmith'.
问题是什么?这不是绕过绑定的正确方法吗?
public static String GetFullName(String domainUser)
{
DataTable dT;
String fullName = "";
OracleConnection db = DatabaseAdapter.GetConn();
db.Open();
OracleCommand oraCommand = new OracleCommand("SELECT fullname FROM user_profile WHERE domain_user_name = '@userName'", db);
oraCommand.BindByName = true;
oraCommand.Parameters.Add(new OracleParameter("@userName", domainUser));
OracleDataReader oraReader = null;
oraReader = oraCommand.ExecuteReader();
if (oraReader.HasRows)
{
while (oraReader.Read())
{
fullName = oraReader.GetString(0);
}
}
else
{
return "No Rows Found";
}
oraReader.Close();
db.Close();
db.Dispose();
return fullName;
}
Run Code Online (Sandbox Code Playgroud)
编辑:我将@添加到参数字段名称,但它仍然无法修复它.
我们在单页面应用程序中使用WebPack.该应用程序部署到许多环境中.我们有一个要求,即应用程序需要在给定环境中调用特定端点.
为了给定环境提供端点地址,就是拥有一个环境模块.这是当前的解决方案(有很多,这不是问题的关键).但是,我们需要从缩小中排除config.js,以便在部署过程中将其覆盖.
config.js如下所示:
module.exports = {
env: {
endpointUrl: 'http://1.2.3.4',
authUrl: 'http://5.6.7.8'
}
};
Run Code Online (Sandbox Code Playgroud)
并使用以下内容引用:
const endpointUrl = config.env.endpointUrl;
const authUrl = config.env.authUrl;
Run Code Online (Sandbox Code Playgroud)
WebPack配置如下所示:
var webpack = require('webpack');
?
module.exports = {
entry: {
main: './src/js/main.jsx',
login: './src/js/login-main.jsx'
},
output: {
path: __dirname + '/dist',
filename: '[name].bundle.js'
},
devtool: 'source-map',
module: {
loaders: [{
test: /.jsx?$/,
exclude: /node_modules/,
loader: 'babel-loader',
plugins: ['transform-react-jsx'],
query: {stage: 0}
}, {
test: /\.jsx?$/,
exclude: /node_modules/,
loader: 'eslint-loader'
}]
},
plugins: [
new webpack.ProvidePlugin({
fetch: …
Run Code Online (Sandbox Code Playgroud) 如何将工件路径传递给TeamCity中的脚本.情景是这样的
第2步由一个脚本组成
我正在努力完成第2步,我想我需要将构建工件的路径传递到脚本中,但我看不出你是怎么做到的?
我创建了一个自定义通用队列,它实现了一个通用的IQueue接口,该接口使用System.Collections.Generic命名空间中的通用Queue作为私有内部队列.示例已清除不相关的代码.
public interface IQueue<TQueueItem>
{
void Enqueue(TQueueItem queueItem);
TQueueItem Dequeue();
}
public class CustomQueue<TQueueItem> : IQueue<TQueueItem>
{
private readonly Queue<TQueueItem> queue = new Queue<TQueueItem>();
...
public void Enqueue(TQueueItem queueItem)
{
...
queue.Enqueue( queueItem );
...
}
public TQueueItem Dequeue()
{
...
return queue.Dequeue();
...
}
}
Run Code Online (Sandbox Code Playgroud)
我希望保持与核心实现的一致性,并注意到核心Queue实现了IEnumerable,所以我将通过在类上显式实现IEnumerable或使用IQueue接口继承它来做同样的事情.
我想知道的是,当列举队列时,每个移动接下来要将下一个项目出列?我已经使用反射器来了解微软是如何做到的,他们所做的只是逐步通过队列私有阵列,但微软远非绝对不可靠,所以我想得到一般意见.
public class CustomQueue<TQueueItem> : IQueue<TQueueItem>, IEnumerable<TQueueItem>
{
...
public IEnumerator<TQueueItem> GetEnumerator()
{
while (queue.Count > 0)
{
yield return Dequeue();
}
}
//Or
public IEnumerator<TQueueItem> GetEnumerator()
{
return queue.GetEnumerator();
}
...
} …
Run Code Online (Sandbox Code Playgroud) 我依稀记得在nUnit中使用Trace.WriteLine在"reSharper"或"TeamCity"的上下文中使用Trace.WriteLine读取"某些内容"的"某处",但我不记得详细信息.
因此,问题是在nUnit单独运行的环境中,或者在reSharper/TeamCity中是否有使用一个优于另一个的任何好处,有什么区别(如果有的话)和你个人会使用什么?
目前我的立场是Trace.WriteLine,不仅因为我依旧记得我梦寐以求的东西,而且我觉得在单元测试中跟踪更多的是诊断任务而不是输出任务.
我们正在办公室讨论如何解决某个特定问题,并提出了一个事件(没有双关语).由于滥用行为的反应是负面的,而且价格昂贵.
我理解滥用背后的问题,我知道它们只是一个特殊的多播委托,但考虑到最多只有一个监听器的情况,为什么在方法调用上使用事件被认为是"昂贵的"?
更新:
需要明确的是,这与任何特定实现无关,这是关于在方法调用上使用事件的成本的更一般性问题.
以下内容无法编译:
DefaultServiceHostFactory.RegisterContainer(Container.Kernel);
Castle 3.0中似乎不存在静态方法 - 我检查了breakingchanges.txt并没有看到列出的内容.
我错过了什么?
是否有任何设置CI服务器(首选团队城市)的经验来管理虚拟机的创建,将软件包部署到计算机,将数据库置于已知配置,然后运行集成测试.拆除整个事情并向团队城市报告测试状态?
我ControllerActionInvoker
用来调用单元测试的控制器动作
var controllerInvoker = new ControllerActionInvoker();
var result = controllerInvoker.InvokeAction(
testController.ControllerContext, "Default" );
Run Code Online (Sandbox Code Playgroud)
如何使用它来调用具有参数的动作?
[AcceptVerbs( HttpVerbs.Post )]
[ActionException( SomeAttribute )]
public SomeResult AddMethod( long[] Ids )
{
//some code
}
Run Code Online (Sandbox Code Playgroud) .net ×4
c# ×3
teamcity ×3
asp.net-mvc ×1
delegates ×1
deployment ×1
events ×1
ienumerable ×1
iterator ×1
javascript ×1
nunit ×1
oauth ×1
oracle ×1
performance ×1
queue ×1
resharper ×1
teamcity-7.0 ×1
trace ×1
unit-testing ×1
wcffacility ×1
webpack ×1
windsor-3.0 ×1