Al intentar crear una aplicación WCF cliente-servidor en Mono, nos encontramos con algunos problemas. Reduciéndolo a un simple ejemplo, encontramos que el servicio solo acepta un cliente a la vez. Si otro cliente intenta conectarse, se bloquea hasta que el primero se desconecta.Mono El servicio WCF NetTcp solo requiere un cliente a la vez
Simplemente cambiando a BasicHttpBinding lo corrige pero necesitamos NetTcpBinding para la comunicación dúplex. Además, el problema no aparece si se compila en MS .NET.
EDIT: dudo (y espero que no) que Mono no es compatible con lo que estoy tratando de hacer. Por lo general, el código mono arroja NotImplementedExceptions en tales casos. Estoy usando v2.6.4 Mono
Ésta es la forma en que se abre el servicio en nuestro escenario básico:
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();
}
El canal de cliente se obtiene de esta manera:
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();
Por lo que yo sé esta es una conexión Simplex, ¿no es así?
El contrato es simplemente:
[ServiceContract]
public interface IHello
{
[OperationContract]
string Greet (string name);
}
aplicación de servicio no tiene etiquetas o atributos ServiceModel.
Voy a actualizar con los detalles necesarios.
¿Cómo es el servicio? ¿Cómo te estás conectando? A lo que me refiero es al aspecto Dúplex ... No sé qué tan bien (si es que lo hace) El dúplex funciona en Mono. ¿Intentó ejecutar el punto final de esta manera y simplemente usar un servicio simple y simple? – TheNextman
Eventualmente necesito usar Duplex, pero este ejemplo básico al que volvimos es un servicio simple simple. Por lo que puedo decir, debería funcionar bien, y SI funciona con BasicHttp. Actualizaré la pregunta con el resto. – vene
En caso de que se lo haya perdido, parece que esto podría solucionarse ahora. Consulte el informe de errores de alexcepois: https://bugzilla.novell.com/show_bug.cgi?id=610659 – TheNextman