4

这是我运行 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: An existing connection was forcibly closed by the remote host. 我还验证了binding.Security.Mode = SecurityMode.None一切正常。我是否有可能以某种方式使这两个运行时与正常工作的安全性互操作?

4

1 回答 1

5

不幸的是,对NetTcpBindingMono 的支持非常有限,并且不支持任何类型的安全性。

如果你只看NetTcpBinding.cs的来源,可能看起来确实如此,但如果你看实际的绑定元素,你会发现很多方法没有实现。

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

另请注意,默认情况下,NetTcpBinding使用WindowsStreamSecurityBindingElement- 不幸的是,我找不到任何关于底层传输机制的文档。

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

于 2013-01-23T02:36:44.400 回答