2010-08-27 6 views
3

J'ai un service qui ressemble à ceci:Mono WCF InstanceContextMode ne fonctionne pas

[ServiceContract(SessionMode = SessionMode.Required)] 
public interface ILabListener 
{ 
    [OperationContract] 
    byte[] GetChallenge(); 
    ... 

...

[ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.PerSession)] 
class LabListener : ILabListener 
{ 
    private byte[] challenge; 

    public LabListener() 
    { 
     [challenge is initialized to random data from RNG] 

     File.AppendAllText(Program.LogPath, String.Format("{1} - Starting LabListener session: {2}, challenge: {3}{0}", 
      Environment.NewLine, DateTime.Now, OperationContext.Current.SessionId, Convert.ToBase64String(auth.Challenge.Take(16).ToArray()))); 
    }   

    public byte[] GetChallenge() 
    { 
     return challenge; 
    } 
    ... 

...

var binding = new NetTcpBinding(SecurityMode.None);      
host = new ServiceHost(typeof(LabListener), new Uri(String.Format("net.tcp://{0}:800/LabListener", Environment.MachineName))); 
host.AddServiceEndpoint(typeof(ILabListener), binding, ""); 

...

LabListenerClient client = new LabListenerClient(); 
Console.WriteLine(Convert.ToBase64String(client.GetChallenge()); 
Console.WriteLine(Convert.ToBase64String(client.GetChallenge()); 

Lors de l'hébergement de ce service dans MS .net sous Windows, la sortie de chaque GetChallenge est la même et le constructeur de LabListener n'est appelé qu'une seule fois.

Si je l'héberge en mono 2.6.7 sous OpenSuSE 11.3, un nouveau LabListener est créé pour chaque appel de GetChallenge, et deux valeurs différentes sont renvoyées.

c'est la sortie du journal sur le serveur sous Linux:

8/26/2010 8:07:57 PM - Démarrer une session LabListener: urn: UUID: 5e41d193-c723-4839-abc0-93103dbd63f1 , défi: hDPwoofYUrEjAJ1Q8cWDYw ==

8/26/2010 8:07:57 PM - Démarrer une session de LabListener: urn: UUID: 5e41d193-c723-4839-abc0-93103dbd63f1, défi: 6/3M4EhiKrAMM2j47MCIpQ ==

Comment corriger le comportement mono?

+0

Vous devriez tester contre les bits Mono les plus récents. Les lots ont été corrigés dans WCF depuis 2.6 ... – TheNextman

Répondre

2

Je vous recommande de construire un tronc SVN (ou de nos jours - GIT plus tard) et essayez à nouveau.

Si cela ne fonctionne pas, écrivez à mono/mono-devel liste de diffusion et voir la réponse.

Probablement un bug Mono et mainteneur vous demandera de remplir un test ou un bug

Questions connexes