Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mono WCF NetTcp service takes only one client at a time

While trying to build a client-server WCF application in Mono we ran into some issues. Reducing it to just a bare example we found that the service only accepts one client at a time. If another client attempts to connect, it hangs until the first one disconnects.

Simply changing to BasicHttpBinding fixes it but we need NetTcpBinding for duplex communication. Also the problem does not appear if compiled under MS .NET.

EDIT: I doubt (and hope not) that Mono doesn't support what I'm trying to do. Mono code usually throws NotImplementedExceptions in such cases as far as I noticed. I am using Mono v2.6.4

This is how the service is opened in our basic scenario:

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 ();

}

The client channel is obtained like this:

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 ();

As far as I know this is a Simplex connection, isn't it?

The contract is simply:

[ServiceContract]
public interface IHello
{

    [OperationContract]
    string Greet (string name);
}

Service implementation has no ServiceModel tags or attributes.

I'll update with details as required.

like image 381
vene Avatar asked May 31 '10 14:05

vene


2 Answers

I've played around with this a bit, and it definitely looks like a Mono bug.

I'm porting a WCF application to run in Mono at the moment. I had played with some NetTcpBinding stuff, but I hadn't tried this scenario (multiple connections to a Mono-hosted service host). However now I try it out, I'm able to reproduce - both in 2.6 and the latest daily package.

It does work in .NET, however. Any difference in behavior between Mono and .NET is classed as a bug. You should log it on Bugzilla with a test case, I would also post in the Mono newslist.

Good luck.

like image 55
TheNextman Avatar answered Nov 15 '22 07:11

TheNextman


Definately a bug. I'm wondering if there was a version it was working correctly...

I've posted it at Novell Bugzilla, if you are interested in its progress.

like image 42
alexcepoi Avatar answered Nov 15 '22 07:11

alexcepoi