是否有人有任何想法,为什么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
};
我不确定它是如何在您的服务器之一工作的?我希望你已经读过了http://msdn.microsoft.com/en-us/library/system.net.credentialcache.defaultcredentials.aspx但它清楚地表明"DefaultCredentials返回的ICredentials实例不能用于查看当前安全上下文的用户名、密码或域。"
从CredentialCache返回的NetworkCredential。DefaultCredential只是一个占位符。如果您使用调试器查看它,您将看到它的类型是SystemNetworkCredential。此类型的内部API检查,以查看是否应该使用集成身份验证。还有其他方法可以获得当前用户名(如WindowsIdentity.GetCurrent())。
编辑:要为WCF操作指定模拟,请将此属性添加到实现契约的方法中:
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public void SomeMethod()
{
// do something here
}