在 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