3

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

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

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

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

这表明身份验证失败。当使用 asp.net 或应用程序 WCF 风暴来联系正常的 API 进行测试时,一切正常。

API 最近被迁移,看起来有些东西没有正确设置,但我不知道是什么。

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

使用基于消息的安全性的 API 的非经典 asp publicaiton 时,使用的用户名和密码有效。

是否可以发布一些可能有助于诊断问题的故障排除技巧,请特别针对传输级安全故障查找和设置?

谢谢斯科特

编辑添加以下更新:

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

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

IIS LOG 显示: 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

4

1 回答 1

2

参考http://theether.net/kb/100127

  1. 加载 cmd 提示符
  2. CD 到 C:\Windows\System32\inetsrv
  3. 输入:appcmd list config -section:system.webServer/asp
  4. 显示以下路径:c:\inetpub\conf\temp\ASP 编译模板
  5. 检查路径是否存在(确实存在)
  6. 检查 NETWORK SERVICE 是否有权访问“ASP 编译的模板”如果不是从 appcmd 执行;

    icacls "c:\inetpub\conf\temp\ASP Compiled Templates" /grant "NETWORK SERVICE:(OI)(CI)(M)"
    

    应阅读“成功处理 1 个文件”

    重新启动应用程序池。

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

抱歉又更新了。网络服务权限更改并没有解决问题,更改为默认应用程序池解决了问题。

终于有先机了 检查:

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

ServiceSecurityAudit 发现我“对象引用未设置为对象的实例”,所以听起来我们的应用程序有错误。


跟进 (17/08/11):

此处记录的服务安全审计:

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

是我们解决这个问题的关键。发现对象引用错误表明业务对象和数据访问 dll 不对齐。使用 CLASSIC ASP 使用 TRANSPORT AUTHENTICATION 联系 WCF.NET API,直到在 WCF 部署中的 behavior.config 文件上启用服务安全审计之前,绝对没有任何迹象表明此错误。

于 2011-08-10T08:53:20.383 回答