使用NetTcpBinding在WCF上流式传输

时间:2010-09-06 09:29:00

标签: .net wcf tcp

我可以成功使用WCF流将xfer数据从服务器发送到同一台机器上的客户端。但是,只要我将服务器部署到另一台计算机,就会出现性质错误“对SSPI的调用失败:目标主体名称不正确”。有没有人遇到这个。我试图在两边设置SecurotyMode.None,但这给了我一些其他的超时错误!

这是服务器绑定:

NetTcpBinding binding = new NetTcpBinding();
binding.TransferMode = TransferMode.Streamed;
binding.MaxReceivedMessageSize = int.MaxValue;
binding.CloseTimeout = TimeSpan.MaxValue;
binding.SendTimeout = TimeSpan.MaxValue;
var ep = serviceHost.AddServiceEndpoint( typeof( ISessionResultsServer ), binding, string.Format( "net.tcp://localhost:{0}/ResultService", port ) ); 

这是客户端绑定:

NetTcpBinding clientBinding = new NetTcpBinding();
clientBinding.TransferMode = TransferMode.Streamed;
clientBinding.SendTimeout = TimeSpan.MaxValue;
clientBinding.CloseTimeout = TimeSpan.MaxValue;
clientBinding.MaxReceivedMessageSize = long.MaxValue;
clientBinding.ReceiveTimeout = TimeSpan.MaxValue;

1 个答案:

答案 0 :(得分:2)

这与流媒体无关。这是安全问题。您正在使用具有Windows安全性的Net TCP,其中服务必须向客户端进行身份验证,并且客户端必须对服务进行身份验证。

您的案例中的服务身份验证基于用户主体名称。它是托管您服务的进程的用户名。您必须修改客户端配置并在端点中设置正确的标识。

类似的东西:

<client>
  <endpoint name="..." addres="net.tcp://..." binding="netTcpBinding" bindingConfiguration="..." contract="...">
    <identity>
      <userPrincipalName value="MyServiceAccount@MyDomain" />
    </identity>
  </endpoint>
</client>