在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标记或属性。
我会根据需要更新详细信息。
答案 0 :(得分:3)
我已经玩过这个了,它肯定看起来像是一个Mono bug。
我正在移植一个WCF应用程序,目前正在Mono中运行。我玩了一些NetTcpBinding的东西,但我没有尝试过这种情况(多个连接到Mono托管的服务主机)。然而,现在我尝试一下,我能够重现 - 无论是2.6还是最新的日常包装。
然而,它在.NET中工作。 Mono和.NET之间的任何行为差异都被归类为错误。您应该使用测试用例在Bugzilla上登录,我也会在Mono新闻列表中发布。
祝你好运。答案 1 :(得分:1)
肯定是一个错误。我想知道是否有一个版本正常工作......
如果您对其进展感兴趣,我已将其发布在Novell Bugzilla。