Mono WCF InstanceContextMode не работает

У меня есть сервис, который выглядит так:

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

При размещении этой службы в MS .net в Windows выходные данные каждого GetChallenge одинаковы, а конструктор для LabListener вызывается только один раз.

Если я размещаю это в mono 2.6.7 под OpenSuSE 11.3, новый LabListener создается для каждого вызова GetChallenge, и возвращаются два разных значения.

это вывод журнала на сервере в Linux:

26.08.2010 20:07:57 — Запуск сеанса LabListener: urn:uuid:5e41d193-c723-4839-abc0-93103dbd63f1, вызов: hdPwoofYUrEjAJ1Q8cWDYw==

26.08.2010 20:07:57 — Запуск сеанса LabListener: urn:uuid:5e41d193-c723-4839-abc0-93103dbd63f1, вызов: 6/3M4EhiKrAMM2j47MCIpQ==

Как исправить моно поведение?


person Excel Kobayashi    schedule 27.08.2010    source источник
comment
Вы должны протестировать самые последние биты Mono. Многое было исправлено в WCF с версии 2.6...   -  person TheNextman    schedule 27.08.2010


Ответы (1)


Я рекомендую вам создать транк SVN (или в настоящее время - последнюю версию GIT) и попробовать еще раз.

Если не работает, напишите в mono/mono-devel и посмотрите ответ.

Вероятно, это ошибка Mono, и сопровождающий попросит вас заполнить тест или ошибку.

person abatishchev    schedule 30.08.2010