wcf错误提示“服务器已拒绝客户端凭据”
一个wcf基于streaming的大文件传输的实例。主要基于microsoft官方例子。
配置很简单,如binding采用netTcpBinding,具体如下:
<netTcpBinding>
<binding transferMode="Streamed" maxReceivedMessageSize="1590309133" openTimeout="15" sendTimeout="15" receiveTimeout="15"></binding>
</netTcpBinding>
服务端和客户端在一个机器上没问题,程序调的通,一些顺利。
后,将服务端和客户端分别放到两台机器上,看看传输效果,结果,客户端报错:“服务器已拒绝客户端凭据”。
仔细想了想,原因如下:
1、例子程序中,没设置Transfer Security mode,则系统默认Transfer Security mode值为“Transport”。
2、在Transport模式下默认客户端认证类型为:“Windows credentials”,即,clientCredentialType为“Windows”。
3、在这种情况下,在一个机器上客户端和服务端都在一个机器上,采用Windows认证肯定没问题。
4、但是放到两个机器上,传过来的基于客户端window账户的客户端凭证在另一个机器上验证不过。除非在服务端机器上做客户端凭证的特别设置。
因为只是测试,可以先把客户端验证关掉即可,在服务端和客户端binding配置分别添加:
<security mode="None"></security>
另外,在千兆局域网中。
据试验传输1G的电影,用netTcpBinding用时大约55秒。
而用basicHttpBinding用时3分多。