小编har*_*don的帖子

应用程序级排队/网站流量管理

我们有一个网站应用程序,我们希望在全年的几个点上获得令人难以置信的高流量.我们目前有一些第三方负载平衡软件,可以在繁忙时段将用户重定向到"保留"页面,以防止我们的Web应用程序服务器被请求的数量所窒息.

展望未来,我们希望能够更好地控制此过程并实现某种虚拟队列.当前负载均衡器没有排队功能,但只允许基于速率限制的流量.这是随机的,当您刷新页面(或获得自动刷新)时,运气很好.

我已经在网上阅读了一些关于此的内容,但发现了很少有关如何实现非常基本的虚拟HTTP请求队列的实现细节.当然,公司提供这种服务作为一种完全成熟的服务,例如queue-itNetprecept,但这些服务对我们当前的需求来说似乎有些过分(并且非常昂贵).

有问题的Web应用程序是用ASP.Net MVC编写的.请记住,我们现在不需要诸如"队列优先级"等高级功能,我使用静态队列管理器类创建了一个非常基本的概念验证,ConcurrentQueue<T>但是我想知道这是否是一个有效,可扩展的方法?这是否可以成为主要应用层的一部分?还是应该分开?有没有人知道如何在ASP.Net MVC应用程序中实现这种功能?


编辑:感谢目前为止的答案.大多数答案似乎都涉及很多关于缓存的细节.这已经(非常)在我们的网站上大量使用,使用ASP.Net网络缓存,在负载均衡器级别缓存完整页面请求和使用AppFabric进行对象缓存.

能够管理队列的原因是因为该进程非常重要.我们通过网站有效地为某个产品创建订单.这意味着这些数据库事务正在考虑事项,例如最后一刻的库存检查等.这就是性能问题出现的地方,这就是想要实现某种排队系统的原因.

在数据库服务器上投入更多资源并不是一个现实的选择.我真的在寻找这种排队系统(C#或其他)的技术实现细节.对不起,如果最初没有说清楚.

asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

20
推荐指数
2
解决办法
3375
查看次数

来自ASP.Net Web API 2的统一,一致的错误响应

我正在开发一个Web API 2应用程序,我正在尝试以统一的方式格式化错误重定位(这样消费者也将知道他们可以检查哪些数据对象/结构以获得有关错误的更多信息).这是我到目前为止所得到的:

{   
    "Errors":
    [
        {
            "ErrorType":5003,
            "Message":"Error summary here",
            "DeveloperAction":"Some more detail for API consumers (in some cases)",
            "HelpUrl":"link to the docs etc."
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这适用于应用程序本身抛出的异常(即内部控制器).但是,如果用户请求错误的URI(并获得404)或使用错误的动词(并获得405)等,Web Api 2会发出默认错误消息,例如

{
     Message: "No HTTP resource was found that matches the request URI 'http://localhost/abc'."
}
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可以捕获这些类型的错误(404,405等)并将它们格式化为上面第一个示例中的错误响应?

到目前为止,我已经尝试过:

  • 自定义ExceptionAttribute inherting ExceptionFilterAttribute
  • 自定义ControllerActionInvoker inherting ApiControllerActionInvoker
  • IExceptionHandler (Web API 2.1中新的全局错误处理功能)

但是,这些方法都不能捕获这些类型的错误(404,405等).关于如何实现这一目标的任何想法?

......或者,我是以错误的方式解决这个问题的?我是否应该仅针对应用程序/用户级别错误格式化我的特定样式的错误响应,并依赖于404之类的默认错误响应?

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

15
推荐指数
1
解决办法
3430
查看次数

PostgreSQL - 返回键值对数组的最佳方法

我正在尝试选择一些字段,其中一个字段需要是一个数组,数组的每个元素都包含两个值.每个数组项都需要包含名称(字符变化)和ID(数字).我知道如何返回单个值的数组(使用ARRAY关键字),但我不确定如何返回一个对象的数组,该对象本身包含两个值.

查询是这样的

SELECT
    t.field1,
    t.field2,
    ARRAY(--with each element containing two values i.e. {'TheName', 1 })
FROM MyTable t
Run Code Online (Sandbox Code Playgroud)

我读到一种方法是通过选择一个类型的值,然后创建该类型的数组.问题是,函数的其余部分已经返回一个类型(这意味着我会有嵌套类型 - 是吗?如果是这样,你将如何在应用程序代码中读回这些数据 - 即使用像NPGSQL这样的.Net数据提供程序?)

任何帮助深表感谢.

sql database postgresql npgsql

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

.Net Core appsettings.json 最佳实践 - 覆盖开发设置(反之亦然)?

在 .Net Core 中寻找构建 appsettings.json 文件的明智方法。

是否应该将基本的“appsettings.json”文件配置为在开发环境中运行,然后基于环境的覆盖(例如 appsettings.production.json)覆盖生产的特定密钥?

或者 appsettings.json 是否应该只包含在所有环境中共享的配置,然后使用特定的 appsettings.development/staging.json 文件为这些环境显式设置密钥?

我担心的是 - 假设应用程序部署到实时服务器,但存储在环境变量(例如覆盖连接字符串)中的密钥丢失或拼写错误等。在这种情况下,应用程序将回退到基础 appsettings.json连接字符串,这对于实时环境来说是不正确的数据库。像这样的场景听起来非常灾难性,特别是因为这很容易被忽视?

所以真正的问题归结为 - 基本 appsettings.json 文件的内容是否应该是默认的“开发”值(例如开发数据库、沙箱 API),并被生产数据覆盖,反之亦然?

.net .net-core asp.net-core

14
推荐指数
4
解决办法
6913
查看次数

HTML根据div高度截断内容

我有一个宽度为130像素,高度为 200像素的div .

各种文本内容在这个div中显示(我写了一些JS来淡入和淡出不同的内容).问题是即使我已经尝试将文本截断为180个字符,有时加载到此div中的内容可能包含图片(或者可能不包含)或者可能包含一些换行符(或者可能不包含)因此固定的字符数截断有时不会剪切足够的文本(即换行符或者图像可能会占用div中更多的垂直空间).

理想情况下,当它要超过200px的高度限制时,我想截断并添加一个省略号 - 这可能吗?我看过CSS text-overflow属性......这似乎只适用于基于宽度的截断(或者这是一个不正确的假设吗?)

也许有一个基于JS的解决方案或者可能会计算出多少个字符和图像(图像大小是固定的),然后换行会占用并截断.

任何想法都非常感谢.

html javascript css jquery

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

Web Deploy API - 部署.NET 4.5应用程序

我们正在使用Web Deploy 3的(几乎完整的未公开的)'公共API'来创建我们网站的.zip包,然后将其同步到服务器:

DeploymentBaseOptions destinationOptions = new DeploymentBaseOptions()
{
       UserName = //username,
       Password = //password,
       ComputerName = //a server
};

using (var deploymentObject = DeploymentManager.CreateObject(DeploymentWellKnownProvider.Package, "C:/MyWebsitePackage.zip"))
{
       deploymentObject.SyncParameters.Load(packageParametersFile); \\ contains some connection string information and nothing more.
       DeploymentSyncOptions syncOptions = new DeploymentSyncOptions();

       syncOptions.WhatIf = false;

       deploymentObject.SyncTo(destinationOptions, syncOptions);
}
Run Code Online (Sandbox Code Playgroud)

这段代码完美无缺,直到我们在生产和构建服务器上安装.NET 4.5并将我们部署的项目升级到4.5.现在我们收到以下错误:

您尝试使用的应用程序池将"managedRuntimeVersion"属性设置为"v4.0".此应用程序需要'v4.5'.有关详情,请访问:http: //go.microsoft.com/fwlink/?LinkId = 221672 #ERROR_APPPOOL_VERSION_MISMATCH.

我们的服务器肯定安装了.Net 4.5,而且IIS网站应用程序池版本是'.NET Framework v4.0.30319'(我知道它说v4但是.NET 4.5是'就地'升级并用以下内容替换4.0 DLL新版本号.30319).

通过添加/p:VisualStudioVersion=11.0标志(导致不同的Web应用程序目标文件),可以通过MSBuild.exe命令行进行部署(而不是通过创建程序包,但直接同步到服务器)来解决此问题用于以某种方式允许部署.NET 4.5应用程序).

有谁知道为什么Web Deploy API会这样抱怨,以及我如何以与MSBuild解决方案相同的方式解决此错误?

c# msbuild asp.net-mvc microsoft-web-deploy

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

C#ToTitleCase和文本格式的日期/时间

我有一个字符串"2011年1月26日星期四".

当我使用CultureInfo.ToTitleCase()格式化时:

var dateString = "THURSDAY 26th JANUARY 2011";
var titleString = myCultureInfoObject.TextInfo.ToTitleCase(dateString);
Run Code Online (Sandbox Code Playgroud)

它显示如下:"Thursday 26Th January 2011".这正是我需要的...除了牛逼第26届世界已经被资本化.有没有办法阻止这种情况发生,因为它是一个约会并且看起来不对?即只有标题 - 套管字符,它们之前没有数字?

.net c# string datetime

10
推荐指数
1
解决办法
241
查看次数

将数据选择为Postgres数组

我有以下数据:

name          id             url

John          1              someurl.com
Matt          2              cool.com
Sam           3              stackoverflow.com
Run Code Online (Sandbox Code Playgroud)

如何在Postgres中编写SQL语句以将此数据选择为多维数组,即:

{{John, 1, someurl.com}, {Matt, 2, cool.com}, {Sam, 3, stackoverflow.com}}
Run Code Online (Sandbox Code Playgroud)

我之前在Postgres中看过这种数组用法,但不知道如何从表中选择数据到这种数组格式.

假设所有列都是类型text.

sql arrays postgresql aggregate-functions

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

Visual Studio 2017 - 团队资源管理器构建'未找到页面'

我们在TFS 2015中使用XAML构建.

在团队资源管理器中,Visual Studio 2017中的构建选项卡(但仍然连接到TFS 2015服务器)突然间我看到以下"找不到页面"消息,并且没有出现我的XAML构建:

在此输入图像描述

这是在删除TFS 2015连接,然后连接到TFS 2017实例,然后删除2017连接,然后重新连接到以前的TFS 2015实例后发生的.

我试过了

  • 清除MEFComponentCache文件夹
  • 运行devenv/setup
  • 完全卸载并重新安装VS2017

...每次连接到我的TFS服务器时,我仍然会收到此错误.我也安装了VS2015,这确实显示了构建但2017年没有.关于这个问题的很多其他帖子似乎与VS2015有关,但不是2017年.我猜这里发生了一些变化.有谁知道为什么会发生这种情况以及如何解决它?

tfs visual-studio visual-studio-2015 tfs-2015 visual-studio-2017

10
推荐指数
1
解决办法
597
查看次数

MVC - 单元测试错误的东西?

在为ASP.Net MVC项目工作时练习一些TDD,我遇到了许多场景,我正在编写测试以确保特定操作返回正确的视图或具有特定属性([ChildActionOnly]等).(事实上​​,我在这里发现了一些有趣的帖子,关于有用的扩展方法,以帮助实现这一点).

几年前,当我第一次介绍单元测试和TDD的概念时,强调的重点是测试应该集中在测试用户所需特性和功能背后的逻辑 - 核心项目的要求"如果你愿意的话.

我的问题是 - 如果是这种情况,是否需要检查要呈现的正确视图文件,或者具有特定属性等的操作是否真的包含单元测试方法的全部内容?我是出于错误的原因编写测试(即只是保护自己和其他同事不会犯重构错误),还是这些有价值的单元测试的有效案例?

c# tdd asp.net-mvc unit-testing

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