【发布时间】:2010-08-27 01:25:45
【问题描述】:
我有一个看起来像这样的服务:
[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 的构造函数只调用一次。
如果我在 OpenSuSE 11.3 下的 mono 2.6.7 中托管它,每次调用 GetChallenge 都会创建一个新的 LabListener,并返回两个不同的值。
这是 Linux 上服务器上的日志输出:
8/26/2010 8:07:57 PM - 开始 LabListener 会话:urn:uuid:5e41d193-c723-4839-abc0-93103dbd63f1,挑战:hDPwoofYUrEjAJ1Q8cWDYw==
2010 年 8 月 26 日晚上 8:07:57 - 开始 LabListener 会话: 骨灰盒:uuid:5e41d193-c723-4839-abc0-93103dbd63f1, 挑战:6/3M4EhiKrAMM2j47MCIpQ==
如何纠正单声道行为?
【问题讨论】:
-
您应该针对最新的 Mono 位进行测试。自 2.6 以来,WCF 中已修复很多...
标签: .net linux wcf mono opensuse