在 II7 上,我们托管基于 WCF/asp.net 的 API。为了允许经典 ASP 应用程序的用户连接到 API,我们必须发布一个我们称为“传输”的版本。这个传输版本也是用asp.net编写的,它指向相同的程序集,只是安全层不同以允许经典asp进行身份验证。使用传输级安全性而不是基于消息的安全性。
当使用浏览器加载服务引用时,我可以加载 svcutil.exe ... WDSL 页面。
当使用我的测试 asp 页面从此引用调用 Web 方法时,我得到以下返回结果:
已完成调用 Web 服务。 状态 = 内部服务器错误 ResponseText = a:InvalidSecurity验证消息安全性时发生错误。
这表明身份验证失败。当使用 asp.net 或应用程序 WCF Storm 进行测试以联系普通 API 时,一切正常。
API 最近被迁移,看起来有些东西没有正确设置,但我无法解释是什么。
我可以浏览到 svcutil.exe ... WDSL 服务引用,当通过浏览器选择它时,我得到了预期的 XML 响应。
使用基于消息的安全性的 API 的非经典 ASP 公开时,所使用的用户名和密码有效。
是否可以发布一些故障排除提示来帮助诊断问题,特别是有关传输级安全故障查找和设置的问题?
谢谢 斯科特
编辑添加以下更新:
尝试使用默认应用程序池和新的应用程序池,但同样的问题仍然存在。
我的测试页错误:ResponseText = a:InvalidSecurity验证消息安全性时发生错误。
IIS日志显示: v3/transport/testclassicasptransportwcfservice.asp ( 200 0 0 ) (即 iis 200) /V3/Transport/DeviceService.svc/DeviceService (500 0 0)(即 iis 错误 500)
注意:TRANSPORT 和 V3 上定义的虚拟目录。 V3 使用 .net(而不是传统的 asp 进行身份验证)可以正常工作。
事件日志: 由于以下错误,应用程序池“传输”的模板持久缓存初始化失败:无法为应用程序池创建磁盘缓存子目录。数据可能有额外的错误代码。
此引用似乎建议修复,但“appcmd”中的许多 DIR 路径和引用并不存在。
_http://theether.net/kb/100127
最佳答案
引用http://theether.net/kb/100127
- 加载cmd提示符
- CD 到 C:\Windows\System32\inetsrv
- 输入:appcmd list config -section:system.webServer/asp
- 显示以下路径:c:\inetpub\conf\temp\ASP 编译模板
- 检查路径是否存在(确实如此)
检查NETWORK SERVICE是否有权访问“ASP编译模板”,如果没有则从appcmd执行;
icacls "c:\inetpub\conf\temp\ASP Compiled Templates" /grant "NETWORK SERVICE:(OI)(CI)(M)"
应为“已成功处理 1 个文件”
重新启动应用程序池。
“验证消息安全性时发生 InvalidSecurityAn 错误”问题仍然存在,但事件日志中的“无法创建磁盘缓存子目录 ....”错误不再出现。
抱歉,又更新了一次。网络服务权限更改没有解决问题,更改为 DEFAULT APP POOL 解决了问题。
终于取得领先了。检查:
- ServiceSecurityAudit 在服务行为中设置。引用http://intrepiddeveloper.wordpress.com/2008/08/07/security-event-logging-auditing/#
- IIS 日志(仅显示非特定错误 500。)
- 已启用故障跟踪(还显示错误 500)。
- 自定义错误已关闭
- 友好的 IE 消息已关闭
- Asp 客户端和服务器端调试
- ProcessMon 正在运行,没有错误。
- Web.config httpErrors errorMode="详细"/> +
ServiceSecurityAudit 发现“对象引用未设置到对象实例”,因此听起来我们的应用程序存在错误。
<小时/>跟进(2011年8月17日):
此处记录了服务安全审核:
http://intrepiddeveloper.wordpress.com/2008/08/07/security-event-logging-auditing/
这是我们解决这个问题的关键。发现了对象引用错误,该错误表明业务对象和数据访问 dll 未对齐。使用 CLASSIC ASP 使用传输身份验证联系 WCF.NET API,在 WCF 部署中的 Behaviour.config 文件上启用服务安全审核之前,绝对没有任何迹象表明此错误。
关于asp.net - 经典 asp "An error occurred when verifying security for the message."iis7 传输级安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6955429/