【问题标题】:Mono WCF client cannot talk to .NET WCF server when Transport security is enabled启用传输安全性后,Mono WCF 客户端无法与 .NET WCF 服务器通信
【发布时间】:2013-01-23 01:11:03
【问题描述】:

这是我运行 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 一切正常。我是否有可能以某种方式使这两个运行时与正常工作的安全性互操作?

【问题讨论】:

    标签: wcf mono net.tcp


    【解决方案1】:

    很遗憾,Mono 中对 NetTcpBinding 的支持非常有限,并且不支持任何类型的安全性。

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

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

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

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

    【讨论】:

    • 这仍然是最新的吗?
    猜你喜欢
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 2011-07-02
    • 2014-02-20
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多