我有一个基于 asp.net 4.0 的 webform 应用程序,部署到两个不同的服务器。webform 应用程序只有一个 Default.aspx 及其代码:
protected void Page_Load(object sender, EventArgs e)
{
MachineKeySection section =
(MachineKeySection)ConfigurationManager.GetSection("system.web/machineKey");
this.Response.Write(section.DecryptionKey);
this.Response.Write("<br />");
this.Response.Write(section.ValidationKey);
this.Response.Write("<br />");
var authToken = "xxxxxx";
//the real token is obviously not xxx, just an example here
this.Response.Write(authToken);
this.Response.Write("<br />");
var ticket = FormsAuthentication.Decrypt(authToken);
if (ticket != null) this.Response.Write(ticket.Name);
this.Response.End();
}
具有相同 web.config 的相同代码部署到两个 Web 服务器。但是,其中一个工作正常,另一个总是ticket
等于 null。如果我删除if (ticket != null)
,则会引发空引用异常。它们具有完全相同的输出,除了票证部分。
Web 服务器在安装了 .NET 框架 4 的 Windows Server 2008 R2 SP1 上运行。我确定两个 Web 服务器上的代码完全一样,包括 machineKey:
<machineKey validationKey="xxx" decryptionKey="yyy" validation="SHA1" decryption="AES" />
这怎么可能发生?你对这个奇怪的问题有任何想法吗?
更新
MS BUG,需要更新包:http: //support.microsoft.com/kb/2656351