2010-05-31 20 views
6

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.

+0

¿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

+0

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

+0

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

Respuesta

3

He jugado un poco con esto, y definitivamente parece un error Mono.

Estoy portando una aplicación WCF para ejecutar en Mono en este momento. Había jugado con algunas cosas de NetTcpBinding, pero no había intentado este escenario (conexiones múltiples a un host de servicio alojado en Mono). Sin embargo, ahora que lo pruebo, puedo reproducirlo, tanto en 2.6 como en el último paquete diario.

Sin embargo, funciona en .NET. Cualquier diferencia en el comportamiento entre Mono y .NET se clasifica como un error. Debería iniciar sesión en Bugzilla con un caso de prueba, también lo publicaría en la lista de noticias de Mono.

Buena suerte.

+0

Quizás en alguna versión anterior de Mono funcione, ¿alguien tuvo alguna buena experiencia con dicho escenario? – vene

+0

WCF realmente no valía la pena molestarse con 2.4, era más una vista previa que otra cosa. Muchos escenarios funcionan en 2.6, pero muchos no se implementan y los lotes se rompen. Han arreglado muchas cosas rotas en 2.8, por lo que tuve muchas esperanzas cuando probé contra el último diario; pero no dadosEstoy interesado en seguir cualquier progresión que hagas con esto, ya que me gustaría usar NetTcpBinding (sin dúplex, sin embargo) en un proyecto en el que estoy trabajando. – TheNextman

+0

De hecho, parece que el Mono NetTcpBinding está roto en este momento. Incluso traté de escribir un servidor sin cabeza que se ejecute en Windows con .NET, para usar solo el lado del cliente del enlace dúplex en Mono. Eso tampoco funcionó. – vene

1

Definitivamente un error. Me pregunto si había una versión que funcionaba correctamente ...

Lo he publicado en Novell Bugzilla, si está interesado en su progreso.

Cuestiones relacionadas