在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标签或属性。
我会根据需要更新详细信息。
该服务的外观如何?你怎么连接?我所得到的是双面打印方面......我不知道双面打印机在Mono中的表现如何(如果有的话)。您是否尝试过像这样运行端点,并仅使用简单的单工服务? – TheNextman 2010-05-31 16:04:14
我最终需要使用Duplex,但我们恢复的这个基本示例是一个简单的Simplex服务。据我可以告诉它应该正确工作,并且它与BasicHttp一起工作。我会更新与其余的问题。 – vene 2010-05-31 16:42:08
如果你错过了它,它现在看起来可能会被修复。请参阅alexcepois错误报告:https://bugzilla.novell.com/show_bug.cgi?id=610659 – TheNextman 2010-06-15 14:36:53