小编Bro*_*ski的帖子

具有不同身份验证标头的HttpClient单实例

鉴于.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所必需的.

.net c# authorization oauth dotnet-httpclient

64
推荐指数
1
解决办法
1万
查看次数

OracleCommand SQL参数绑定

我对下面参数的绑定有问题.连接有效,因为我在不使用参数的情况下测试了它.但是,执行前查询的值仍然使用'@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)

编辑:我将@添加到参数字段名称,但它仍然无法修复它.

c# oracle system.data.oracleclient

29
推荐指数
2
解决办法
13万
查看次数

从webpack缩小中排除模块

我们在单页面应用程序中使用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)

javascript bundling-and-minification webpack

23
推荐指数
2
解决办法
2万
查看次数

TeamCity构建和部署:如何将依赖工件路径传递给脚本?

如何将工件路径传递给TeamCity中的脚本.情景是这样的

  1. 建设项目
  2. 部署项目(具有工件依赖性到#1)

第2步由一个脚本组成

  1. 停止服务(解锁文件)
  2. 将构建工件复制到服务器
  3. 重新启动服务

我正在努力完成第2步,我想我需要将构建工件的路径传递到脚本中,但我看不出你是怎么做到的?

deployment build-automation teamcity teamcity-7.0

18
推荐指数
1
解决办法
1万
查看次数

如果队列上的IEnumerable迭代器应该使项目出列

我创建了一个自定义通用队列,它实现了一个通用的IQueue接口,该接口使用System.Collections.Generic命名空间中的通用Qu​​eue作为私有内部队列.示例已清除不相关的代码.

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)

.net c# queue ienumerable iterator

15
推荐指数
3
解决办法
7420
查看次数

在nUnit中使用Console.Out.WriteLine vs Trace.WriteLine要么在隔离中运行,要么在reSharper或TeamCity中运行

我依稀记得在nUnit中使用Trace.WriteLine在"reSharper"或"TeamCity"的上下文中使用Trace.WriteLine读取"某些内容"的"某处",但我不记得详细信息.

因此,问题是在nUnit单独运行的环境中,或者在reSharper/TeamCity中是否有使用一个优于另一个的任何好处,有什么区别(如果有的话)和你个人会使用什么?

目前我的立场是Trace.WriteLine,不仅因为我依旧记得我梦寐以求的东西,而且我觉得在单元测试中跟踪更多的是诊断任务而不是输出任务.

.net resharper teamcity trace nunit

12
推荐指数
1
解决办法
8490
查看次数

.net事件的性能影响

我们正在办公室讨论如何解决某个特定问题,并提出了一个事件(没有双关语).由于滥用行为的反应是负面的,而且价格昂贵.

我理解滥用背后的问题,我知道它们只是一个特殊的多播委托,但考虑到最多只有一个监听器的情况,为什么在方法调用上使用事件被认为是"昂贵的"?

更新:

需要明确的是,这与任何特定实现无关,这是关于在方法调用上使用事件的成本的更一般性问题.

.net performance events delegates

9
推荐指数
2
解决办法
1378
查看次数

CastleWindsor 3.0和DefaultServiceHostFactory.RegisterContainer()?

以下内容无法编译:

DefaultServiceHostFactory.RegisterContainer(Container.Kernel);

Castle 3.0中似乎不存在静态方法 - 我检查了breakingchanges.txt并没有看到列出的内容.

我错过了什么?

castle-windsor wcffacility windsor-3.0

9
推荐指数
1
解决办法
1649
查看次数

使用持续集成部署到虚拟机以运行集成测试

是否有任何设置CI服务器(首选团队城市)的经验来管理虚拟机的创建,将软件包部署到计算机,将数据库置于已知配置,然后运行集成测试.拆除整个事情并向团队城市报告测试状态?

virtualization teamcity continuous-integration

9
推荐指数
1
解决办法
1916
查看次数

使用ControllerActionInvoker进行单元测试以使用参数调用操作

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)

asp.net-mvc unit-testing controlleractioninvoker

8
推荐指数
1
解决办法
2675
查看次数