У меня есть сервис, который выглядит так:
[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:
8/26 / 2010 20:07:57 - запуск сеанса LabListener: urn: uuid: 5e41d193-c723-4839-abc0-93103dbd63f1, вызов: hDPwoofYUrEjAJ1Q8cWDYw ==
8/26/2010 20:07:57 - Запуск сеанса LabListener: urn: uuid: 5e41d193-c723-4839-abc0-93103dbd63f1, вызов: 6 / 3M4EhiKrAMM2j47MCIpQ ==
Как мне исправить моно поведение?