Mono WCF NetTcp服务一次只能使用一个客户端

时间:2010-05-31 14:54:01

标签: wcf mono nettcpbinding

在Mono中尝试构建客户端 - 服务器WCF应用程序时遇到了一些问题。 将它简化为一个简单的例子我们发现该服务一次只接受一个客户端。如果另一个客户端尝试连接,它将挂起,直到第一个客户端断开连接。

只需更改为BasicHttpBinding即可修复它,但我们需要NetTcpBinding进行双工通信。如果在MS .NET下编译,也不会出现问题。

编辑:我怀疑(并且希望不是)Mono不支持我正在尝试做的事情。在我注意到的情况下,单声道代码通常会在这种情况下抛出NotImplementedExceptions。我使用的是Mono v2.6.4

这是在我们的基本场景中打开服务的方式:

public static void Main (string[] args)
{
    var binding = new NetTcpBinding ();
    binding.Security.Mode = SecurityMode.None;
    var address = new Uri ("net.tcp://localhost:8080");
    var host = new ServiceHost (typeof(Hello));
    host.AddServiceEndpoint (typeof(IHello), binding, address);

    ServiceThrottlingBehavior behavior = new ServiceThrottlingBehavior ()
    {
        MaxConcurrentCalls = 100,
        MaxConcurrentSessions = 100,
        MaxConcurrentInstances = 100            
    };
    host.Description.Behaviors.Add (behavior);

    host.Open ();
    Console.ReadLine ();
    host.Close ();

}

客户端频道的获取方式如下:

var binding = new NetTcpBinding ();
binding.Security.Mode = SecurityMode.None;
var address = new EndpointAddress ("net.tcp://localhost:8080/");
var client = new ChannelFactory<IHello> (binding, address).CreateChannel ();

据我所知这是Simplex连接,不是吗?

合同很简单:

[ServiceContract]
public interface IHello
{

    [OperationContract]
    string Greet (string name);
}

服务实现没有ServiceModel标记或属性。

我会根据需要更新详细信息。

2 个答案:

答案 0 :(得分:3)

我已经玩过这个了,它肯定看起来像是一个Mono bug。

我正在移植一个WCF应用程序,目前正在Mono中运行。我玩了一些NetTcpBinding的东西,但我没有尝试过这种情况(多个连接到Mono托管的服务主机)。然而,现在我尝试一下,我能够重现 - 无论是2.6还是最新的日常包装。

然而,它在.NET中工作。 Mono和.NET之间的任何行为差异都被归类为错误。您应该使用测试用例在Bugzilla上登录,我也会在Mono新闻列表中发布。

祝你好运。

答案 1 :(得分:1)

肯定是一个错误。我想知道是否有一个版本正常工作......

如果您对其进展感兴趣,我已将其发布在Novell Bugzilla