我有一个使用带有 Windows 身份验证的 BasicHttpBinding 的 WCF 服务。大多数客户端是域帐户并使用其默认凭据连接到服务。
现在我想从在本地帐户下运行的 ASP.NET 客户端连接到服务。我想使用 ASP.NET 应用程序可用的 Windows 凭据(域\用户和密码)连接到 WCF 服务。
我知道我可以使用 ClientBase<T>.ClientCredentials 在代码中做到这一点。
有没有办法在客户端的 web.config 文件中指定凭据(域\用户和密码),这样我就不必更改代码?
编辑
如果无法在配置文件中完成,有没有办法使用 System.Net.ICredentials 或 System.Net.NetworkCredential 作为 WCF 服务的凭据?
.NET Framework 将这些作为提供网络凭据的同质方式提供,但对于 WCF,这似乎已被抛弃,取而代之的是基于不相关 System.ServiceModel.Description.ClientCredentials 类的新不兼容系统。
编辑 2
接受 Marc 对原始问题的回答 - 在客户端配置文件中似乎没有办法做到这一点:(
我认为这是 WCF 的一个缺陷——我不接受微软应该故意阻止我们将凭据放入配置文件中——毕竟它们必须存储在某个地方,并且框架包括用于加密配置文件的工具。我想我可以为此创建一个自定义的 BehaviorExtensionElement,但它应该是开箱即用的。
这也有点不一致:system.net/mailSettings/smtp/network 配置元素允许指定凭据,那么为什么不使用 WCF?
关于使用 System.Net.NetworkCredential 的第二个问题,从这个博客看来,至少在使用 Windows 身份验证时,可以使用以下代码:
factory.Credentials.Windows.ClientCredential =
new System.Net.NetworkCredential(name, password, domain);