我在F5负载均衡器后面有两个Web服务器。 每个Web服务器都有相同的应用程序。 在负载均衡器的configuration从源地址持久性更改为最less连接之前没有问题。
现在在一些应用程序中,我接受了这个错误
“/”应用程序中的服务器错误。
视图状态validation失败。 如果此应用程序由Web场或群集托pipe,请确保configuration指定相同的validation密钥和validationalgorithm。 AutoGenerate不能在群集中使用。 说明:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪,了解有关错误的更多信息以及源代码的位置。
exception详细信息:System.Web.HttpException:validationviewstate MAC失败。 如果此应用程序由Web场或群集托pipe,请确保configuration指定相同的validation密钥和validationalgorithm。 AutoGenerate不能在群集中使用。
- ASP.NET MVC共享虚拟主机推荐? (或者,好的Windows VPS提供商?)
- 如何查询任务pipe理器
- 在Windows 7 RC上安装.NET 3.5 SP1
- 什么是导致此IIS 7 Web服务零星的连接错误?
- 405 – “方法不允许”添加托pipe在IIS7中的服务
源错误:
生成此未处理exception的源代码只能在debugging模式下编译时显示。 要启用此function,请按照以下任一步骤操作,然后请求url:
在生成错误的文件的顶部添加一个“Debug = true”指令。 例:
要么:
2)将以下部分添加到应用程序的configuration文件中:
请注意,这第二种技术将导致给定应用程序内的所有文件都以debugging模式进行编译。 第一种技术只会导致在debugging模式下编译特定的文件。
重要提示:在debugging模式下运行应用程序会产生内存/性能开销。 在部署到生产场景之前,应确保应用程序已禁用debugging。
如何将机器密钥添加到machine.config文件? 我是否在IIS的服务器级别或每个站点的网站/应用程序级别执行此操作? validation密钥和解密密钥在两个Web服务器上必须相同还是不同? 他们应该不同的每个machine.config版本的.net?
我找不到这种情况的任何文件。
如果您只需要它为您的网站,您可以将其添加到您的网站的web.config。 如果有多个站点/应用程序需要使用相同的machineKey来进行encryption/解密,那么您将使用机器范围的configuration文件。
是的,它们应该在服务器场中的所有服务器上都是相同的,您应该为每个.NET文件夹的machine.config(.NET 2.0 + 4.0和x86 + x64,因此您可能正在更新四个文件)执行此操作。
以下是您可能用于生成密钥的一些示例代码:
/// <summary> /// http://msdn.microsoft.com/en-us/library/w8h3skw9.aspx /// </summary> public static string CreateMachineKey(int characterLength) { /* * decryptionKey: * DES: 64 bits (16 hexadecimal characters) * 3DES:192 bits (48 hexadecimal characters) * AES: 128 bits (32 characters), 192 bits (48 characters), or 256 bits (64 characters) * validationKey: AES requires a 256-bit key (64 hexadecimal characters). MD5 requires a 128-bit key (32 hexadecimal characters). SHA1 requires a 160-bit key (40 hexadecimal characters). 3DES requires a 192-bit key (48 hexadecimal characters). HMACSHA256 requires a 256-bit key (64 hexadecimal characters). HMACSHA384 requires a 384-bit key (96 hexadecimal characters). HMACSHA512 requires a 512-bit key (128 hexadecimal characters). */ byte[] byteArray = new byte[characterLength / 2]; RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); rng.GetBytes(byteArray); StringBuilder sb = new StringBuilder(characterLength); for (int i = 0; i < byteArray.Length; i++) { sb.Append(string.Format("{0:X2}", byteArray[i])); } Debug.WriteLine(sb); return sb.ToString(); }
这是一个machine.config的例子:
<system.web> <machineKey decryption="AES" decryptionKey="D416EFCFEC011CC3A8F0F72A15E7EF725AA39FDBCE3CA361" validation="HMACSHA256" validationKey="EF4BFB4B2E1A9AB427430897A13528E4530A231112014E070B246DCA7383EB7F4163D685F590E9B54005F5215AD3BA7CE4EA7D404FE310C543D100D09CC00AE2"/> </system.web>
文件:
%SYSTEMROOT%\ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中
%SYSTEMROOT%\ Microsoft.NET \ Framework64 \ v4.0.30319 \ CONFIG \ machine.config中
%SYSTEMROOT%\ Microsoft.NET \框架\ v2.0.5727 \ CONFIG \ machine.config中
%SYSTEMROOT%\ Microsoft.NET \ Framework64 \ v2.0.5727 \ CONFIG \ machine.config中