我们很难判断这些凭证对象是如何工作的。事实上,他们可能无法工作,我们预计他们如何工作。这是对当前问题的解释。使用DefaultCredentials和DefaultNetworkCredentials
我们有2台服务器需要通过webservices彼此交谈。第一个(我们称之为Server01
)具有作为NetworkService帐户运行的Windows服务。另一个Server02
具有与IIS 6.0一起运行的ReportingServices。 Server01
上的Windows服务试图使用ReportingServices WebService生成报告并通过电子邮件发送。
所以,这是我们到目前为止所尝试的。
在运行时设置的凭据(这工作完全正常):
rs.Credentials = new NetworkCredentials("user", "pass", "domain");
现在,如果我们可以使用一个通用的用户都将被罚款,但是......我们不允许。所以,我们试图利用DefaultCredetials或DefaultNetworkCredentials并把它传递到RS web服务:
rs.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials
或者:
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
无论哪种方式将无法正常工作。我们总是从IIS获取401 Unautrorized。现在,我们知道的是,如果我们想给访问记录为网络服务资源,我们需要将它授予DOMAIN\MachineName$
(http://msdn.microsoft.com/en-us/library/ms998320.aspx):
授予访问远程SQL Server
如果您正在访问同一域(或受信任域中)的另一台服务器上的数据库时,网络服务帐户的网络凭据将用于向数据库进行身份验证。网络服务帐户的凭证格式为DomainName \ AspNetServer $,其中DomainName是ASP.NET服务器的域,AspNetServer是您的Web服务器名称。
例如,如果您的ASP.NET应用程序在域CONTOSO中名为SVR1的服务器上运行,则SQL Server会看到来自CONTOSO \ SVR1 $的数据库访问请求。
我们假设以与IIS相同的方式授予访问权限可行。但是,它没有。或者至少,有些东西没有正确设置以便正确认证。
因此,这里有一些问题:
我们读过有关“冒充用户”的地方,我们需要设置这个地方在Windows服务?
是否可以将对NetworkService内置帐户的访问权授予远程IIS服务器?
感谢您的阅读!
优秀的链接:D – omglolbah 2010-04-19 09:14:26