我们(我们的IT合作伙伴真的)最近为我们拥有的网络养殖网站更改了一些DNS,以便两个生产服务器之间进行循环DNS切换.在此切换之前,我们确实没有WebResource.axd文件问题.自切换以来,当我们点击实时公共URL时,我们收到错误:
CryptographicException
填充无效,无法删除.
当我们自己点击特定服务器时,它们会很好地加载.我研究了这个问题,看起来因为它们在两台服务器之间共享资产,我们需要machineKey在web.config每台服务器上保持一致,这样它们才能在两者之间一致地加密和解密.我的问题是:
machineKey在服务器上生成一个工具,还是需要编写代码才能执行此操作?machineKey到web.config每个服务器上或者你认为我会需要做任何事情就两个服务器协同工作?(两者web.config目前都没有machineKey)首先介绍一下当前环境的背景知识.我们有许多ASP.NET应用程序,所有这些应用程序都在某些方面使用会话.由于流量水平,我们在多个服务器上"负载均衡",但是,我们的负载平衡设置为使用"Sticky Sessions",因为当前所有Web应用程序都设置为使用"InProc"进行会话状态.
我们正在考虑能够在我们的负载均衡器上删除"Sticky Sessions"配置,因为我们的流量负载服务器可以并且确实会过载.我们希望采用更加平衡的方法,但必须能够使用会话.
我知道SqlServer的会话状态会起作用,但由于我们无法控制的原因,我们无法使用SqlServer来存储我们的状态.在研究中似乎StateServer是我们最好的选择.我们有一个额外的服务器,周围有大量的内存.此服务器可以是整个Web群集的StateServer.我们只想知道以下事情.
1.)除了从InProc切换到StateServer的任何潜在的序列化问题之外,是否存在丢失会话对象或在上面列出的环境中产生错误的主要已知问题?
2.)除了单点故障,并且性能稍慢,我们需要注意使用StateServer的任何其他问题.
3.)是否有任何指标显示三种状态存储之间的性能差异?
我们的网站使用ADFS进行身份验证.为了减少每次请求的cookie有效负载,我们开启了IsSessionMode(请参阅节食中的fedauth cookies).
我们需要做的最后一件事就是在负载均衡的环境中实现这个功能,就是实现一个农场就绪的SecurityTokenCache.实现看起来非常简单,我主要想知道在处理SecurityTokenCacheKey以及TryGetAllEntries和TryRemoveAllEntries方法时是否存在任何问题(SecurityTokenCacheKey具有Equals和GetHashCode方法的自定义实现).
有没有人有这样的例子?我们计划使用AppFabric作为后备存储,但使用任何持久存储的示例将是有用的 - 数据库表,Azure表存储等.
以下是我搜索过的一些地方:
谢谢!
JD
3/16/2012更新 Vittorio的博客链接到使用新的.net 4.5内容的示例:
ClaimsAwareWebFarm 这个示例是对我们很多人的反馈的回答:你想要一个显示农场就绪会话缓存的示例(而不是tokenreplycache),这样你就可以通过引用而不是交换大的cookie来使用会话; 并且您要求一种更简单的方法来保护农场中的cookie.
什么是使ASP.NET MVC应用程序Web场准备就绪的最有效方法.
最重要的是共享当前用户的信息(上下文)和(不那么重要)缓存的对象,例如查找项(状态,街道类型,县等).
我听说过/读过MemCache但没有看到关于如何实现和测试它的简单适用方式(文档).
我正在寻找有关如何创建ASP.NET Web场的信息 - 也就是说,如何使ASP.NET应用程序(最初设计为在单个Web服务器上工作)在2,3,10等服务器上运行?
我们创建了一个Web应用程序,当有500个用户同时使用时,它可以正常运行.但现在我们需要让它适用于10 000个用户(同时使用Web应用程序).
因此,我们需要设置20个Web服务器,并通过在其Web浏览器中键入"www.MyWebApp.ru"来使10 000个用户可以使用Web应用程序,尽管他们的请求将由20个Web服务器处理,他们知道这一点.
1)是否有特殊的标准软件来创建ASP.NET Web场?
2)或者我们是否应该通过手动(使用ASP.NET/C#)在不同Web服务器之间传输请求来自己创建Web场?
我发现很少有关于ASP.NET Web场的信息和Web上的可伸缩性:在大多数情况下,有关可伸缩性的文章讲述了如何优化ASP.NET应用程序并使其运行得更快.但我没有找到在2个Web服务器上运行的"Hello world"类ASP.NET Web应用程序的示例.
如果有人可以发布文章的链接,或者更好地讲述自己在ASP.NET"web耕作"中的经验并解决可扩展性问题,那将会很棒.
谢谢你,米哈伊尔.
假设Web场中有许多负载平衡的Web服务器,在应用程序代码中使用应用程序/ Web服务器时间来获取系统日期/时间是否安全,还是应该将此责任留给数据库服务器?
webfarm中所有服务器上的机器日期/时间设置是否有可能不同步?
如果日期/时间是DBMS的责任,那么如果我们有负载均衡的集群DB,这个策略将如何运作?
我们在其中一个Web服务器中安装了.net 4.5 Framework.我们的应用程序针对.net 4.0,并在负载均衡器后面运行多个服务器.
安装后,我们收到一些POST请求的以下错误消息
error_name = System.ArgumentException error_message =无效的回发或回调参数.使用配置或页面中的<%@ Page EnableEventValidation ="true"%>启用事件验证.出于安全考虑,此功能可验证回发或回调事件的参数是否来自最初呈现它们的服务器控件.如果数据有效且符合预期,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证.error_details =来源:System.Web
当从安装了.net 4.5的服务器请求时,请求正文中的__EVENTVALIDATION值不同.MSDN提到.net 4.5中的加密更改使用了opt in配置,因此默认情况下它应该向后兼容.
在没有禁用事件验证的情况下是否有配置更改,我需要为_EVENTVALIDATION执行与安装.net 4.5的计算机上的行为相同,因为它只使用.net 4.0?
我需要实现SessionSecurityTokenCache才能在负载均衡的Web场中使用WIF.我可以使用这个类适合(例如基于SQL)的Web服务器实现,还是我真的需要创建自己的?
我有一个 ASP.NET Core 应用程序,它使用 cookie 身份验证并在 Web 场上运行。数据保护密钥存储在 DB 中。我的应用程序实现了 IXmlRepository,ASP.NET Core 将调用 IXmlRepository.GetAllElements 来获取密钥环。因此,所有节点中的应用程序都使用相同的密钥环,并且在节点 1 中加密的 cookie 可以在节点 2 中解密。它工作正常。
但是,数据保护密钥将过期,ASP.NET Core 将生成新密钥。ASP.NET Core 还会缓存密钥,并将每 18-24 小时刷新一次。所以,当key过期时,Node1可能会生成一个新的key,但是其他所有的节点可能不会马上刷新并得到新的key。节点 1 加密的 Cookie 无法在所有其他节点中解密。
ASP.NET Core 如何处理这种情况?
我读了这个https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/web-farm?view=aspnetcore-2.2,它指出
默认配置通常不适用于在 Web 场中托管应用程序。实现共享密钥环的另一种方法是始终将用户请求路由到同一节点。
用户使用该节点登录后,这是将所有请求路由到同一节点的唯一选择吗?
web-farm ×10
asp.net ×5
wif ×2
.net ×1
.net-4.5 ×1
adfs ×1
asp.net-core ×1
asp.net-mvc ×1
azure ×1
caching ×1
cryptography ×1
machinekey ×1
memcached ×1
scalability ×1
web-config ×1