我有一个托管在集群环境中的Web服务。调用此服务的Web应用程序也托管在群集环境中,但位于另一组IIS6服务器上。因此,应用程序服务器是appserv1和appserv2,服务服务器是svcserv1和svcserv2。我们不控制访问哪些服务器,因为我们通常只将它们称为appserv或svcserv 该服务是WCF服务,但已创建为与.Net 2.0 Web服务框架兼容。应用程序在运行时运行良好,但可能> 35%的时间服务以异常响应:请求失败,HTTP状态为401:未授权。错误。
我见过其他人建议直接设置凭证,我的应用程序正在执行以下操作。
Dim cc As New CredentialCache()
Dim service As WCFServiceRef.Reports
service = New WCFServiceRef.Reports
service.Url = serviceURL
cc.Add(New Uri(service.Url), "Negotiate", New NetworkCredential("username", "password"))
service.Credentials = cc
reportData = service.GenerateReport(reportid, True, parameters, "PDF", Environment)
我还尝试通过更改引用URL来绕过加载管理器直接访问各个服务器,然后直接转到服务器的域名,但这没有任何区别。
我也看过this MSDN知识库文章,但由于我没有直接访问服务器配置(并且很难改变任何内容),我想确保没有我可以做的事情从申请方面来看。请注意,服务器已配置为Windows身份验证,不允许匿名访问。
谢谢!
答案 0 :(得分:2)
这很大程度上取决于您的身份验证尝试是使用Kerberos还是回退到NTLM。我建议使用像Fiddler这样的工具来捕获从应用服务器发送的数据包,以验证正在使用的身份验证协议。
如果您发现自己正在使用Kerberos,请尝试以下几点:
希望这有点帮助。如果你正在使用NTLM,那么我很遗憾没有很多想法,因为我习惯于在仅限Kerberos的环境中工作。
答案 1 :(得分:1)
首先检查每台计算机上的IIS日志,看看401错误是否来自一台计算机。
接下来要检查的是401是否与特定网址相关。
答案 2 :(得分:0)
要考虑的另一件事:
你需要粘性会话吗? 是否存在经常回收的服务器?
有很多理由说明为什么你可能会得到401s,所以你只需要挖掘并找出发生了什么。