小编use*_*100的帖子

是否需要使用ElasticSearch的负载均衡器?

我有一个在AWS EC2上运行的3个ElasticSearch节点的集群.这些节点使用OpsWorks/Chef进行设置.我的目的是将此集群设计为非常有弹性和弹性(节点可以在需要时进出).

从我读过的关于ElasticSearch的所有内容来看,似乎没有人建议在集群前放置负载均衡器; 相反,似乎建议做两件事之一:

  1. 将客户端指向一个节点的URL/IP,让ES为您执行负载平衡,并希望该节点永远不会出现故障.

  2. 将所有节点的URL/IP硬编码到客户端应用程序中,让应用程序处理故障转移逻辑.

我的背景主要是在Web场中,创建大量自治Web服务器,在其前面抛出ELB并让负载均衡器确定哪些节点存活或死亡,这是常识.为什么ES似乎不支持这种相同的架构?

lucene amazon-ec2 amazon-web-services nosql elasticsearch

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

使用Azure Redis的StackExchange.Redis速度非常慢或引发超时错误

我将所有现有的Azure In-Role缓存使用移至Redis,并决定将Azure Redis预览与StackExchange.Redis库(https://github.com/StackExchange/StackExchange.Redis)一起使用.我为它编写了所有代码没有太多问题,但是在运行时它绝对非常慢并且不断抛出超时错误(我的超时时间设置为15秒).

以下是我如何设置Redis连接并将其用于简单操作的相关代码:

    private static ConnectionMultiplexer _cacheService;
    private static IDatabase _database;
    private static object _lock = new object();

    private void Initialize()
    {
        if (_cacheService == null)
        {
            lock (_lock)
            {
                if (_cacheService == null)
                {
                    var options = new ConfigurationOptions();
                    options.EndPoints.Add("{my url}", 6380);
                    options.Ssl = true;
                    options.Password = "my password";
                    // needed for FLUSHDB command
                    options.AllowAdmin = true;

                    // necessary?
                    options.KeepAlive = 30;
                    options.ConnectTimeout = 15000;
                    options.SyncTimeout = 15000;

                    int database = 0;

                    _cacheService = ConnectionMultiplexer.Connect(options);
                    _database …
Run Code Online (Sandbox Code Playgroud)

c# asp.net caching azure redis

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

向ASP.NET Web API Controller添加显式操作路由

我有一个ASP.NET Web API项目,ApiController它为User端点提供以下操作:

GET /api/User
POST /api/User
DELETE /api/user
Run Code Online (Sandbox Code Playgroud)

我想提供以下端点:

GET /api/user/metrics
Run Code Online (Sandbox Code Playgroud)

但是,当我像这样定义控制器动作时:

[HttpGet]
public HttpResponseMessage Metrics()
{
    return null;
}
Run Code Online (Sandbox Code Playgroud)

我收到Multiple actions were found that match the request错误消息.

我理解这违反了"纯"REST API的定义,但这就是我想要做的.我想我必须通过映射HTTP路由来解决这个问题,但是我尝试了一些路由而且我无法让它工作.我的路线应该是什么样的?

c# asp.net rest asp.net-mvc asp.net-web-api

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

如何将ASP.NET Web API属性路由与复杂对象参数一起使用?

我有一个Web API操作,如下所示:

[HttpGet]
[Route("api/query/hello/{query}")]
public HttpResponseMessage Hello([FromUri]Query query)
{
    return null;
}
Run Code Online (Sandbox Code Playgroud)

其中Query类具有名为的公共字符串属性QueryText.当我点击以下网址时,收到404错误:

/api/query/hello?QueryText=bacon
Run Code Online (Sandbox Code Playgroud)

这在我开始使用属性路由之前有效.如果我没有参数或基本类型参​​数,我可以使属性路由工作.但是对于复杂的参数,我得到了404s.属性路由如何使用复杂的操作参数?它与FromUri属性兼容吗?

c# asp.net-web-api asp.net-web-api-routing

13
推荐指数
1
解决办法
7066
查看次数

如何在Newtonsoft JSON序列化程序中禁用对象引用创建?

我将我的ASP.NET MVC应用程序切换为使用Newtonsoft JsonSerializer来执行我们的JSON序列化,如下所示:

var writer = new JsonTextWriter(HttpContext.Response.Output) { Formatting = Formatting };
var serializer = JsonSerializer.Create();
serializer.Serialize(writer, myData);
Run Code Online (Sandbox Code Playgroud)

这会生成一些具有$ id和$ ref属性的JSON,然后从JSON中删除重复的对象.我知道这是一个很棒的功能,但是阅读这个JSON的客户端不能支持解释这些引用并期望完整的对象存在.我已经尝试将PreserveReferencesHandling属性设置JsonSerializerSettings为每个可能的值,它似乎没有任何区别.

如何禁用$ id和$ ref属性的创建,并让Newtonsoft序列化器写出整个对象图?

编辑:这是一个示例C#类,我期望的JSON,以及由Newtonsoft序列化程序创建的JSON:

public class Product
{
    public Image MainImage { get; set; }

    public List<Image> AllImages { get; set; }
}

public class Image
{
    public int Id { get; set; }
    public string Url { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望JSON:

{
    MainImage: { Id: 1, Url: 'http://contoso.com/product.png' },
    AllImages: [{ …
Run Code Online (Sandbox Code Playgroud)

c# asp.net json json.net

11
推荐指数
1
解决办法
6812
查看次数

在Visual Studio Windows Azure模拟器下运行ASP.NET MVC应用程序时创建正确的绝对URL

我需要在ASP.NET MVC 4应用程序中创建特定文件的绝对URL.我目前正在通过生成相对路径Url.Content,然后使用以下扩展方法来创建绝对路径.

public static string Absolute(this UrlHelper url, string relativeUrl)
{
    var request = url.RequestContext.HttpContext.Request;
    return string.Format("{0}://{1}{2}{3}", 
        (request.IsSecureConnection) ? "https" : "http", 
        request.Url.Host, 
        (request.Url.Port == 80) ? "" : ":" + request.Url.Port, 
        VirtualPathUtility.ToAbsolute(relativeUrl));
}
Run Code Online (Sandbox Code Playgroud)

在Azure模拟器下运行时,我需要创建的正确URL是,http://127.0.0.1/myfile.jpg但是当执行此代码时,端口号将返回81,因此生成的URL为http://127:0.0.1:81/myfile.jpg.但是,如果我去http://127:0.0.1:81/myfile.jpg它当然不起作用,因为Azure模拟器正在侦听端口80,而不是81.

我假设这与内置的Azure Emulator/IIS Express负载均衡器有关,但我不确定我需要对我的Url.Absolute方法做出哪些更改才能返回准确的URL.

c# asp.net asp.net-mvc azure

7
推荐指数
1
解决办法
7549
查看次数

当主机站点使用RequireJS时,将KnockoutJS作为第三方程序包的一部分加载时出错

我开发了一个JavaScript插件,可以包含在我们客户的网站上.我创建的插件依赖于一些外部库,它们被捆绑并作为一个大包传递给客户端:jQuery 1.8.2和KnockoutJS v3.0.0.

该插件在大多数站点上都可以正常运行,但如果主机站点使用RequireJS,则我的包无法加载,因为KnockoutJS会自动检测到RequireJS存在并尝试使用它.这是抛出的错误:

Mismatched anonymous define() module
Run Code Online (Sandbox Code Playgroud)

显然,我在RequireJS网站上找到了错误消息的"解释".不幸的是,我不明白如何避免它.在我的KnockoutJS库的本地副本中,我发现了违规行:

(function(factory) {
    // Support three module loading scenarios
    if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') {
        // [1] CommonJS/Node.js
        var target = module['exports'] || exports; // module.exports is for Node.js
        factory(target);
    } else if (typeof define === 'function' && define['amd']) {
        // [2] AMD anonymous module
        define(['exports'], factory);
    } else {
        // [3] No module loader (plain <script> tag) - put directly in …
Run Code Online (Sandbox Code Playgroud)

javascript jquery requirejs knockout.js

5
推荐指数
1
解决办法
361
查看次数