从Windows 8.1连接客户端时,我的WCF应用程序出现问题。在过去的几天里,我一直为此疯狂,无法深入了解它。情况如下:
我的WCF服务相当简单。它使用basicHttpBind,具有TransportCretionalOnly安全模式和摘要客户端凭据类型。(web. config文件在这里:http://pastebin.com/LsWmcfTs)。它是这样做的,因为我需要服务器端的windows标识。
我的客户端是一个控制台应用程序,当它尝试调用我的服务中的“ping”方法时发生故障(它只是返回文本“Pong”)用于连接到服务的代码如下:
var basicBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
basicBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Digest;
var client = new TestExecutionEngineClient(basicBinding, new EndpointAddress(uri));
client.Open();
client.Ping();
这已经在所有连接客户端上工作了一年多,除了Windows 8.1,也就是说,它从未工作过。
当它命中client.Ping()时;我得到下面的异常:
例外:
使用客户端身份验证方案'Digest',HTTP请求未经授权。从服务器收到的身份验证标头是'Digest qop="auth",算法=MD5-sess, nonce="升级的v1c1d404aaeb7edbba8daf132fe97aa12243033a0f40acf01376892331a408411c85513f482eab750b18498cb2d420b2fb998b5b8b071a2",charset=utf-8,领域="Digest"'。
内部异常:
远程服务器返回错误:(401)未经授权。
基本例外:
安全包中没有可用凭据
据我所知,看起来服务器端正在请求摘要(正确)并且客户端正在摘要中进行身份验证,但它不会接受它……
任何帮助都将不胜感激谢谢
问题是Microsoft在8.1/2012 R2中增强了LSAS中的安全性。不再支持通过网络发送用户身份信息的BasicHttpBind。您必须改用WSHttpBind。
这解决了我的问题