阿不

不抛弃,不放弃

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  158 随笔 :: 0 文章 :: 2073 评论 :: 66 Trackbacks

这里在使用asp.net ajax的程序发布后经常出现的一个异常情况。其实早在使用atlas时,就已经出现了这个异常了,只是那时并没有非常频繁的出现,也就是在程序启动后规律性的出现几次后就不发生了。由于不影响整个程序的正常运行也就没有关注了。但是在更新到asp.net ajax beta2版本后,并且使用了泛解析使用二级域名后就经常出错了,而且有几个规律:

1.在所有看到这个异常的邮件中,查看到的IP都是google的访问。而没有其它的用户,甚至是搜索引擎。

2.在出错的地方大部分是用二级域名访问资源路径:如 http://*.*.com/ScriptResource.axd?d=42zFeGddIOG6Ha39Bm22fyspDkNNAkCyiJm0F-kHdJ6O7yOwanGTbMYrJ6yzzZzUmROqn-J-NAWN5_V3qQJ90iV1TUiF-c0EYaTG7q-FEduJI7Emddi3XbvRgK-wH9VD0&t=632997086300000000

3.在分析的几个查询参数都不一样(d,t),照理说,要获得相同的脚本路径应用是使用相同的查询参数的啊。

简单分析:从目前获取的一些信息可以表明,这是由于google在访问了不存在的脚本资源出现的加密错误。可是它是怎么得到这些不存在的脚本资源路径的呢?为什么正常访问的用户不会出错呢?目前还没有自己得到很好的解释。

发布环境:asp.net ajax beta2,使用了UrlRewrite,Release version Assembly,没有限制ScriptResorce.axd的表单访问权限,web.config的debug=false 。

虽不影响正常运行,但为了随时了解程序的运行情况,我开启了healthmoniter,现在邮箱都快被填爆了。

如果您也有出现过类似异常,欢迎讨论。如果您已解决过类似异常,还请指教。

 

附上异常信息:

 

填充无效,无法被移除。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Security.Cryptography.CryptographicException: 填充无效,无法被移除。
源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:

[CryptographicException: 填充无效,无法被移除。]
System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast) +1489116
System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) +306
System.Security.Cryptography.CryptoStream.FlushFinalBlock() +30
System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Boolean useValidationSymAlgo) +154
System.Web.UI.Page.DecryptString(String s) +79
[TargetInvocationException: 调用的目标发生了异常。]
System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) +0
System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) +72
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) +358
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +29
System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) +17
Microsoft.Web.Handlers.ScriptResourceHandler.DecryptString(String s) +185
Microsoft.Web.Handlers.ScriptResourceHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +325
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +154
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +64
阿不 http://hjf1223.cnblogs.com
posted on 2006-12-31 09:43 阿不 阅读(1777) 评论(7)  编辑 收藏 所属分类: JavaScript相关技术

评论

#1楼  2007-01-04 15:26 Cat Chen      
我的Community Server提交了Google Sitemaps,看Google的报告中说些WebResource.axd无法访问,我也不知道它如何获得那些WebResource.axd的地址的,因为根本不存在对应的资源,而Community Server部署后我没有手动修改过自然也就不会有新的资源。
  回复  引用  查看    

#2楼 [楼主] 2007-01-04 16:54 阿不      
不知道google的splider是怎么一回事啊.
  回复  引用  查看    

#3楼 [楼主] 2007-01-15 09:11 阿不      
在asp.net forums上找到这样的一段话:
A partial fix is excluding all axd from your robots.txt file (see one of my earlier posts). This will solve the issue when a search engine wants to re-index the axd.

The problem is that the query parameters to the axd is changed every time, when you use old ones, the crypto error is thrown. So when people look at a page from your website through google cache, the cached copy has a old reference to the axd and you will see the message. Besides blocking google from caching you pages, I could not find a solution for that. I just ignore them in my error-mail script.
大概意思是:
在robots.txt文件排除所有的.axd的请求可以解决部分问题(见我之前的一个回复).当搜索引擎需要重要索引这些.axd请求时,这样做会解决这个错误,。
这个问题的产生是由于每次.axd的请求参数都发生了变化,当你使用旧的请求参数时,加密失败异常将会产生。所以当用户从google cache中链接到你们的站点时,缓存中将会使用旧的.axd引用,然后你就会看到这样的错误。除非禁止google缓存你的页面,但我目前没有找到好的办法来解决它。我只是不想收到太多这样的错误邮件。
  回复  引用  查看    

#4楼 [楼主] 2007-01-15 09:14 阿不      
他的前一个回复如下:
I changed my robots.txt file to:

User-agent: *
Disallow: /*.axd$
  回复  引用  查看    

#5楼  2007-02-06 18:26 chuanzai [未注册用户]
healthmoniter
请问是个什么东西?
  回复  引用    

#6楼  2007-04-25 10:25 limin [未注册用户]
robots.txt 是哪里的文件?搜索引擎的吗?
  回复  引用    

#7楼 [楼主] 2007-04-26 08:35 阿不      
robots.txt是放在站点目录下的文件,可以用来控制搜索引擎的可访问范围。
  回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-12-31 09:45 编辑过


相关链接: