2010-05-31 96 views
6

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

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

编辑:我怀疑(并希望不是)单声道不支持我想要做的。就我所知,单声道代码通常会在这种情况下抛出NotImplementedException异常。我使用单声道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标签或属性。

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

+0

该服务的外观如何?你怎么连接?我所得到的是双面打印方面......我不知道双面打印机在Mono中的表现如何(如果有的话)。您是否尝试过像这样运行端点,并仅使用简单的单工服务? – TheNextman 2010-05-31 16:04:14

+0

我最终需要使用Duplex,但我们恢复的这个基本示例是一个简单的Simplex服务。据我可以告诉它应该正确工作,并且它与BasicHttp一起工作。我会更新与其余的问题。 – vene 2010-05-31 16:42:08

+0

如果你错过了它,它现在看起来可能会被修复。请参阅alexcepois错误报告:https://bugzilla.novell.com/show_bug.cgi?id=610659 – TheNextman 2010-06-15 14:36:53

回答

3

我玩过这一点,它看起来像一个单声道错误。

我正在移植一个WCF应用程序,目前在Mono中运行。我曾经玩过一些NetTcpBinding的东西,但我没有尝试过这种情况(与单一主机服务主机的多个连接)。不过现在我试了一下,我可以重现 - 无论是在2.6还是最新的日常包装中。但是,它可以在.NET中工作。 Mono和.NET之间的任何行为差异归类为一个错误。您应该使用测试用例将其登录到Bugzilla,我也会在Mono新闻列表中发布。

祝你好运。

+0

也许在某些较早版本的Mono中,它有效,是否有人有过这种情况的良好体验? – vene 2010-05-31 21:42:30

+0

WCF在2.4中真的不值得打扰,它比其他任何东西都更值得一试。很多场景都在2.6下工作,但很多都没有实现,很多都是坏的。他们在2.8中修复了很多破解的东西,这就是为什么当我测试最新的每日测试时我非常有希望;但没有骰子。我有兴趣跟随你所做的任何进展,因为我想在我正在开发的一个项目中使用NetTcpBinding(不包括双工)。 – TheNextman 2010-05-31 23:52:08

+0

事实上,目前Mono NetTcpBinding似乎已经崩溃。我甚至尝试编写在.NET下运行Windows的无头服务器,以便仅使用Mono下双工绑定的客户端。那也行不通。 – vene 2010-06-01 19:13:33

1

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

我已经发布它在Novell Bugzilla,如果你对它的进展感兴趣。

相关问题