C# System.Web.HttpException:这是无效的脚本资源请求

C# System.Web.HttpException:这是无效的脚本资源请求,c#,asp.net,C#,Asp.net,我在将我们的网站推送到客户的生产服务器时遇到了这个错误,但是该页面在他们的开发/测试服务器上运行得非常好。导致此错误的原因是什么(考虑到我自己没有使用任何web资源,尽管我使用的是asp.net ajax工具包)。您可以检查生成此错误的URL。Web资源(由Ajax工具包使用)依赖于查询字符串参数。如果该参数以某种方式被更改(可能是被某个恶意用户更改),HTTP处理程序将抛出异常,即它找不到请求的web资源。是否可以获取此错误的完整堆栈跟踪?服务器事件日志中将有一个(系统或应用程序,不记得是哪个

我在将我们的网站推送到客户的生产服务器时遇到了这个错误,但是该页面在他们的开发/测试服务器上运行得非常好。导致此错误的原因是什么(考虑到我自己没有使用任何web资源,尽管我使用的是asp.net ajax工具包)。

您可以检查生成此错误的URL。Web资源(由Ajax工具包使用)依赖于查询字符串参数。如果该参数以某种方式被更改(可能是被某个恶意用户更改),HTTP处理程序将抛出异常,即它找不到请求的web资源。

是否可以获取此错误的完整堆栈跟踪?服务器事件日志中将有一个(系统或应用程序,不记得是哪个)

ASP.NET的各个部分都使用脚本资源,我能想到的这种错误至少有两个稍微模糊的失败原因

  • 信不信由你,如果你的DLL中嵌入了资源,并且它们在将来已经过时,这种情况就会发生(如果你曾经在英国编译过DLL,然后立即将它们部署到美国的web服务器上,你就会很清楚这个问题!)。我记不起这显示的事件日志错误,但如果我看到它,我会知道的,而且它不是立即明显的
  • 如果负载平衡器在多台服务器之间路由请求而不具有“粘性”,并且您的服务器具有不同的机器密钥,则请求将失败,因为标识资源的加密查询字符串将无法在另一台服务器上解密。这将导致堆栈跟踪,其中包括各种加密类型

  • 还有很多其他原因(如不正确的URI,或如上所述的查询字符串损坏),但是有一个完整的堆栈跟踪会有所帮助。

    如果确实使用多个服务器,请尝试以下方法: 添加到您的web.config:

    <machineKey  
    validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7
                   AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"           
    decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
    validation="SHA1"
    decryption="AES"
    />
    
    
    
    但是您可以使用下面的代码示例自己生成validationKey和decryptionKey:
    上面的链接还解释了有关此解决方案的更多信息,请查看,在该页面上查找Web场部署注意事项

    最后的错误是由于管理员没有告诉我们的服务器发生了URL重写。!小心那一个

    我以前总是会犯这个讨厌的错误。用户确实受到此错误的影响。我们过去常常收到关于页面加载不正确的投诉。在尝试添加
    DOCTYPE
    等许多操作后,错误并没有完全消失。然后我们尝试在会话中存储所有的
    VIEWSTATE
    。小提琴不再出错。如果您的应用程序的视图状态像我们的一样臃肿,那么您将在日志中看到此错误。通常。

    你的网站链接是什么?将阅读您收到的消息吗?是的,IIS运行良好,不幸的是,我无法提供链接。我认为服务器正在有效地剥离查询字符串参数。请求.axd文件时没有必要的数据(这反过来会生成404)。我认为这是因为我的web服务(.asmx)也不起作用,如果你不传入任何qs参数,它们的行为就是这样。即使我收到了相同的错误,我的观察结果是,这是由一些垃圾邮件发送者完成的,他们用不同的IP自动发出请求呼叫,你知道我该如何阻止吗?绝对糟糕,viewstate不会存储在会话中,因为所有表单数据都将存储在RAM中,更不用说何时删除旧的viewstate了,您不希望同时打开两个webforms会导致其中一个失去viewstate。那个么,在会话结束时,什么时候删除它呢?我将ViewState存储在dictionary对象中,时间戳和页面名称作为键。密钥转到网页,KVP保留在服务器内存中。并在一定时间后使ViewState过期。这是一个临时解决方案,直到我的工作,我的网页有尽可能少的ViewState。可怕的?是的,它有效吗?对它有效吗:在你的网站用户数超过几千之前,是的,除此之外,由于数据丢失/
    OutOfMemoryException
    ,不可预测的结果。Aidiakapi,许多人想要一个严肃的正面网站,从一开始就开始使用Asp.NETWebForms(现在他们无法迁移到MVC或其他更专业的框架)不得不求助于此。我有一个每天有数千名用户的网站,我的aspnet_state.exe只使用了200Mb的Ram。相反,我的w3wp.exe使用的是800Mb。我的服务器中的RAM总量是32Gb,所以这没有多大区别。你建议的替代方案是什么?你真的同意Microsoft的观点吗?在每次GET和POST请求中,你都应该发送和接收一个膨胀的Viewstate?你能告诉我机器密钥存储在哪里吗?在服务器场的所有服务器上使用相同的密钥是否有问题?在这个链接中找到了我需要的内容:。基本上,这些值存储在web.config.comments中的机器级别。使用机器密钥进行负载平衡修复了我的问题。由于SQL会话状态,其他一切都正常工作。我收到了相同的错误。这是一个无效的脚本资源请求,在具有F5负载平衡的webFarm中有3台IIS服务器具有相同的machineKey``