经典 asp "An error occurred when verifying security for the message." iis7 传输级别安全性



在II7上我们托管了一个基于WCF/asp.net的API。为了允许经典asp应用程序的用户连接到API,我们必须发布一个我们称之为"传输"的版本。这个Transport版本也是用asp.net编写的,它指向相同的程序集,只是安全层不同,允许经典asp进行身份验证。使用传输级安全性,而不是基于消息的安全性。

当使用浏览器加载服务引用时,我可以加载svcutil.exe…WDSL页面。

当使用我的测试asp页面从这个引用调用web方法时,我得到以下返回:

已调用Web服务。状态=内部服务器错误ResponseText = a:InvalidSecurityAn验证消息安全性时发生错误。

这表明身份验证失败。当测试使用asp.net或WCF风暴的应用程序,以联系正常的API,一切工作良好。

API最近迁移了,似乎有些东西没有正确设置,但我无法解释是什么。

我可以浏览到svcutil.exe…WDSL服务引用,当通过浏览器选择它时,我得到预期的XML响应。

使用基于消息的安全性使用API的非经典asp发布时使用的用户名和密码。

是否有可能发布一些可能有助于诊断问题的故障排除提示,特别是关于传输级安全故障查找和设置?

谢谢斯科特

编辑添加以下更新:

尝试使用默认应用程序池和新的应用程序池,但同样的问题仍然存在。

我的测试页错误:ResponseText = a:InvalidSecurityAn验证消息安全性时发生错误。

IIS日志显示:V3/transport/testclassicasptransportwcfservice.asp(200 00)(即iis 200)/V3/运输/DeviceService。svc/DeviceService(500 00)(即iis error 500)

注意:在TRANSPORT和V3上定义了虚拟目录。V3使用。net而不是经典的asp进行身份验证。

事件日志:由于以下错误,应用程序池"transport"的模板持久缓存初始化失败:无法为应用程序池创建磁盘缓存子目录。数据可能有额外的错误代码。

这个参考似乎建议修复,但"appcmd"中的许多DIR路径和引用不存在。

_http://theether.net/kb/100127

REF http://theether.net/kb/100127

  1. 加载cmd提示符
  2. CD到C:WindowsSystem32inetsrv
  3. 输入:apppcmd list config -section:system.webServer/asp
  4. c:inetpubconftempASP编译模板
  5. 检查路径是否存在
  6. 检查网络服务是否有权限访问"ASP编译模板"如果没有从appcmd执行;

    icacls "c:inetpubconftempASP Compiled Templates" /grant "NETWORK SERVICE:(OI)(CI)(M)"
    

    应该读取"成功处理了1个文件"

验证安全性时发生InvalidSecurityAn错误消息"问题仍然存在,但"无法创建磁盘缓存子目录...."事件日志中的错误不再发生。

对不起,又更新了。更改网络服务权限不能解决问题,更改为默认应用程序池解决了问题。

终于有线索了。检查:

  1. ServiceSecurityAudit设置在服务行为中。Ref http://intrepiddeveloper.wordpress.com/2008/08/07/security-event-logging-auditing/
  2. IIS日志(仅显示非特定错误500.)
  3. 故障跟踪启用(也显示错误500)。
  4. 自定义错误关闭
  5. IE友好消息关闭
  6. Asp客户端和服务器端调试
  7. ProcessMon正在运行,没有错误。
  8. 网络。config httpErrors errorMode=" detail "/> +

ServiceSecurityAudit发现我一个"对象引用没有设置为对象的实例",所以听起来我们的应用程序有一个bug。


跟进(17/08/11):

服务安全审计记录在这里:

http://intrepiddeveloper.wordpress.com/2008/08/07/security-event-logging-auditing/

是我们解决这个问题的关键。发现了对象引用错误,该错误表明我们的业务对象和数据访问dll不一致。使用CLASSIC ASP与WCF联系。使用传输身份验证的。NET API,在对该行为启用服务安全审计之前,绝对没有此错误的指示。

相关内容

  • 没有找到相关文章

最新更新