首先,我终于能够追踪我的错误了。事实证明,我实际上设法创建一个SQL Server死锁,这反过来意味着我的.Net图表抛出了一个未处理的NullReference异常(derp)。
好吧,所以,只有少数几个 ViewState的替代品 在ASP.NET中。我终于让我的页面工作了,所以我把它留在这里给任何随机发生的人。
你在SO上看到的其中一个选择就是 设置机器密钥 并启用MAC状态,如下所示:
<pages enableViewStateMac="true">
然后:
<machineKey validationKey="[128 Hex Number]" decryptionKey="[64 Hex Number" validation="SHA1" decryption="AES" />
出于安全原因,我对此表示担忧,但我无法使其他解决方案有效。我最终得出的结论是,我只是静态地设置它并在常规的基础上重新生成机器密钥 微软的示例代码 :
static void Main(string[] argv) { //128 Hex characters for the validation key, 64 for the AES decryption key int hexLengthForEncryption = 128; string validationKey = Generate_New_Key(hexLengthForEncryption, argv); hexLengthForEncryption = 64; string decryptionKey = Generate_New_Key(hexLengthForEncryption, argv); string[] originalKeys = new string[2] {validationKey, decryptionKey}; Generate_File(originalKeys); Console.WriteLine("The file has been generated. Would you like to generate new keys in a new file?"); string yorn = Console.ReadLine(); while ((yorn != "N") && (yorn != "n") && (yorn != "no") && (yorn != "No")) { hexLengthForEncryption = 128; validationKey = Generate_New_Key(hexLengthForEncryption, argv); hexLengthForEncryption = 64; decryptionKey = Generate_New_Key(hexLengthForEncryption, argv); string[] freshLines = new string[2]{validationKey, decryptionKey}; Generate_File(freshLines); Console.WriteLine("The file has been generated. Would you like to generate new keys to a new file?"); yorn = Console.ReadLine(); } }
但这并没有完全解决我的问题。我最终做的是,对于具有查找页面的图表,我在我的大型SQL查询中添加了一个try catch,尽管如此 从这样的帖子预订 和类似的担忧 Stack(溢出)上的WITH(NOLOCK) ,我们认为可能的陷阱落在可接受的误差范围内。
在实际关心会话ID的页面中,我不得不强制程序暂停并返回查找页面。有趣的是,它在我退出时并没有崩溃,而且每两分钟刷新一次图表。不使用会话ID的页面在主页面上仍然有一个像这样设置的丢弃变量:
protected override void OnInit(EventArgs e) { base.OnInit(e); ViewStateUserKey = Session.SessionID; }
而这在控制解决方案中正常工作:
//This variable is necessary to having a session state persist across postbacks, but is otherwise useless Session["Throwaway"] = DateTime.Now;
此页面上的Catch只是重定向回自身。具有搜索页面的那个引起了参考循环问题,因为会话状态(页面依赖于生成图表)是空的,因此打破了图表。我不知道这会对任何人有所帮助,但是使用会话状态的图表和不需要会话状态的图表最终都会在网络升级后工作。干杯!