在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响应。
当使用基于消息的secuirty的API的非经典asp公开时,使用的用户名和密码可以正常工作。
是否可以发布一些可能有助于诊断问题的故障排除提示,请特别关注传输级安全性故障查找和设置?
谢谢 斯科特
编辑添加以下更新:
尝试使用默认应用程序池和新的应用程序池,但同样的问题仍然存在。
我的测试页错误:ResponseText = a:验证邮件的安全性时发生InvalidSecurityAn错误。
IIS LOG显示: v3 / transport / testclassicasptransportwcfservice.asp(200 0 0)(即iis 200) /V3/Transport/DeviceService.svc/DeviceService(500 0 0)(即错误500)
注意:在TRANSPORT和V3上定义虚拟目录。 V3使用.net工作正常,而不是经典的asp进行身份验证。
活动日志: 由于以下错误,应用程序池“传输”的模板持久高速缓存初始化失败:无法为应用程序池创建磁盘高速缓存子目录。数据可能包含其他错误代码。
此引用似乎提示修复,但“appcmd”中的许多DIR路径和引用都不存在。
_http://theether.net/kb/100127
答案 0 :(得分:1)
REF _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编译模板”/授予“网络服务:(OI)(CI)(M)”
应为“成功处理1个文件”
重新启动应用池。
“验证邮件的安全性时出现”InvalidSecurityAn错误“问题仍然存在,但事件日志中的”可能不会创建磁盘缓存子目录....“错误不再发生。
对不起另一个更新。网络服务权限更改DID无法解决问题,更改为DEFAULT APP POOL解决了问题。
终于领先了。检查:
ServiceSecurityAudit发现我“未将对象引用设置为对象的实例”,所以听起来我们的应用程序有错误。
跟进(2011年8月17日):
此处记录了服务安全审计:
http://intrepiddeveloper.wordpress.com/2008/08/07/security-event-logging-auditing/
是我们解决此问题的关键。揭示了对象引用错误,指出Business Objects和Data Access dll不对齐。使用CLASSIC ASP使用TRANSPORT AUTHENTICATION联系WCF.NET API,在WCF部署中的behaviour.config文件上启用Service Security Audit之前,绝对没有任何迹象表明此错误。
*已解决*