3

次のようなサービスがあります。

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

Windows 上の MS .net でこのサービスをホストする場合、各 GetChallenge の出力は同じで、LabListener のコンストラクターは 1 回だけ呼び出されます。

これを OpenSuSE 11.3 の mono 2.6.7 でホストすると、GetChallenge の呼び出しごとに新しい LabListener が作成され、2 つの異なる値が返されます。

これは、Linux 上のサーバーでのログ出力です。

2010 年 8 月 26 日 8:07:57 PM - LabListener セッションの開始: urn:uuid:5e41d193-c723-4839-abc0-93103dbd63f1、チャレンジ: hDPwoofYUrEjAJ1Q8cWDYw==

2010 年 8 月 26 日 8:07:57 PM - LabListener セッションの開始: urn:uuid:5e41d193-c723-4839-abc0-93103dbd63f1、チャレンジ: 6/3M4EhiKrAMM2j47MCIpQ==

モノラル動作を修正するにはどうすればよいですか?

4

1 に答える 1

2

SVNトランク(または最近はGIT最新)をビルドして、再試行することをお勧めします。

うまくいかない場合は、mono / mono-develメーリングリストに書き込んで、答えを確認してください。

おそらくそれはMonoのバグであり、メンテナはテストまたはバグを埋めるように求めます

于 2010-08-30T07:09:54.697 に答える