我在同一台机器上的一个站点下有两个虚拟目录。它们作为网络服务标识在IIS6上运行。其中一个应用程序是一个Web服务,应该锁定只能使用某些凭据进行访问。第二个应用程序是一个应该可以访问Web服务的公共站点。
我已检查集成Windows身份验证,并且未在Web服务上取消选中启用匿名访问。我给了MACHINE_NAME $用户对Web服务目录的读取和执行权限(可能不是必需的)。
当我从公共站点调用Web服务时,它看起来像是这样:
var service = new WebService(ConfigurationManager.AppSettings["Url"]);
service.Credentials = CredentialCache.DefaultNetworkCredentials;
service.PreAuthenticate = true;
ServicePointManager.ServerCertificateValidationCallback = ValidateCertificate;
var result = service.CallWebService(str);
我期望将网络服务帐户凭据传递给Web服务并从CallWebService返回值。我得到的是401错误。
我检查过IIS日志,调用该方法后,有三个帖子成为了Web服务,但它们不包含凭据。
我还检查了安全事件日志,并在调用类似于此的方法时出现Failure Audit事件:
Logon Failure:
Reason: An error occurred during logon
User Name: MACHINE_NAME$
Domain: DOMAIN_NAME
Logon Type: 3
Logon Process: 8e
Authentication Package: NTLM
...