3

有没有人知道为什么 CredentialCache.DefaultCredential 会返回一个 ICredential 实例,其中域、用户名和密码为空字符串?我在 IIS 7.5 上运行 WCF 服务。它在一台服务器上运行良好,但在另一台服务器上无法运行。我已验证 IIS 应用程序已启用 Windows 身份验证....

以下是它的使用方式:

string url = string.Format("{0}/departments/finance/_vti_bin/listdata.svc", _IntranetAddress);
var financeDataContext = new FinanceDataContext(new Uri(url))
{
    Credentials = CredentialCache.DefaultCredentials
};
4

2 回答 2

3

我不确定它在您的一台服务器上是如何工作的?我希望你已经阅读了这个 http://msdn.microsoft.com/en-us/library/system.net.credentialcache.defaultcredentials.aspx 但它清楚地说“由 DefaultCredentials 返回的 ICredentials 实例不能用于查看用户名、密码或当前安全上下文的域。”

于 2011-10-17T02:48:40.053 回答
1

从 CredentialCache.DefaultCredential 返回的 NetworkCredential 只是一个占位符。如果您使用调试器查看它,您会发现它的类型为 SystemNetworkCredential。内部 API 检查此类型以查看是否应使用集成身份验证。还有其他方法可以获取当前用户名(如 WindowsIdentity.GetCurrent())。

编辑:要为 WCF 操作指定模拟,请将此属性添加到实现合同的方法中:

[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public void SomeMethod() 
{
    // do something here
}
于 2011-10-18T10:37:29.940 回答