启用传输安全时,Mono WCF客户端无法与.NET WCF服务器通信

启用传输安全时,Mono WCF客户端无法与.NET WCF服务器通信,wcf,mono,net.tcp,Wcf,Mono,Net.tcp,以下是我如何运行WCF主机: var baseAddress = new Uri("net.tcp://localhost:2222/blah"); var binding = new NetTcpBinding(); binding.Security.Mode = SecurityMode.Transport; var sh = new ServiceHost(typeof(MyServiceImpl), baseAddress); sh.AddServiceEndpoint(typeof

以下是我如何运行WCF主机:

var baseAddress = new Uri("net.tcp://localhost:2222/blah");

var binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Transport;

var sh = new ServiceHost(typeof(MyServiceImpl), baseAddress);
sh.AddServiceEndpoint(typeof(IMyService), binding, baseAddress);
sh.Open();
这是我的客户:

Uri uri = new Uri("net.tcp://localhost:2222/blah");
var address = new EndpointAddress(uri);
var binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Transport;
var client = new MyServiceClient(binding, address);
client.Open();

当我使用Mono 2.10运行时执行客户机和服务器时,一切都正常。但当服务器在.NET 4.0上运行时,我得到一个
System.IO.IOException:Read failure-->System.Exception:一个现有连接被远程主机强制关闭。我还验证了使用
binding.Security.Mode=SecurityMode.None
可以正常工作。我是否有可能使这两个运行时与正常工作的安全性进行互操作?

不幸的是,Mono中对
NetTcpBinding
的支持非常有限,它不支持任何类型的安全性

如果您只看的是的源代码,看起来可能是这样,但是如果您看的是实际的绑定元素,您将看到许多未实现的方法

事实上,几天前我在开发新的WCF配置系统时遇到了同样的问题,我想让
NetTcpBinding
与安全性一起工作,当我调查它为什么不工作时,我意识到有太多东西没有实现,所以让它工作可能是一项更大的任务

还请注意,默认情况下,
NetTcpBinding
使用
WindowsStreamSecurityBindingElement
——遗憾的是,我找不到有关底层传输机制的任何文档


如果您使用的是.NET 4.5,请使用
BasicHttpBinding
或新的
BasicHttpsBinding
(它也将很快在MonoTouch中提供)。

这仍然是最新的吗?