【问题标题】:WCF InstanceContextMode.PerSessionWCF InstanceContextMode.PerSession
【发布时间】:2012-04-26 17:50:13
【问题描述】:

如果我使用这个:InstanceContextMode.PerSession,那么对于每个客户端,我都会初始化我的服务一次。我说的对吗?

如果我调用具有 [OperationBehavior(TransactionScopeRequired = true)] 的方法,则会调用 JobImplement 构造函数。为什么?

我的服务:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
    public class JobImplement : IJob
    {
        public static int Sum = 0;
        public JobImplement()
        {
            Sum++;
        }
        [OperationBehavior(TransactionScopeRequired = true)]
        public void UselessMethod1()
        {
        }
        [OperationBehavior(TransactionScopeRequired = true)]
        public void AddEmployee(string Name, string Age)
        {
        }
        public int GetSum()
        {
            return Sum;
        }
    }

编辑 1:

我正在使用 WSHttpBinding 绑定,这是我唯一的客户端代码。

我的客户:

static void Main(string[] args)
        {
            ServiceReference1.IJob Service1 = new ServiceReference1.JobClient();
            Service1.UselessMethod1();//sum become [1]
            Service1.AddEmployee("","");//sum become [2]
            Console.WriteLine(Service1.GetSum());//show [2].
            Console.WriteLine(Service1.GetSum());//show [2].
            Console.WriteLine(Service1.GetSum());//show [2].
        }

【问题讨论】:

  • 这意味着当人们为您的问题提供合适的答案时,您应该接受最佳答案(通过单击旁边的空心绿色复选标记)。既然我的建议似乎奏效了,让我将其重写为答案,您可以接受它:)

标签: c# wcf


【解决方案1】:

此处编写的服务使用ServiceBehavior.ReleaseServiceInstanceOnTransactionComplete 属性的默认值,即true

这意味着通过TransactionScopeRequired 强制执行事务范围的方法将导致服务实例被释放,并且下一次调用方法时,尽管您需要InstanceContextMode,但仍会创建一个新实例。

将相关属性更改为false 应该可以解决问题。

【讨论】:

    【解决方案2】:

    看起来就像每次客户端调用您的服务时都会创建您的新服务实例。这可能是因为客户端终止了会话(以及您的构造函数)。例如客户端关闭代理,在这种情况下,下次客户端调用服务时,将创建新会话。您是否在每次连接到服务时检查您没有关闭代理?

    【讨论】:

    • 对不起,我没明白你想说什么。
    • 很抱歉造成混淆。我只是重写我的描述。希望现在更好:)
    • 首先,感谢您的编辑。其次,我说会话仅在我调用包含以下内容的方法时终止:TransactionScopeRequired = true。顺便说一句,什么是代理?我为我的英语感到抱歉,祝你有美好的一天!
    猜你喜欢
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    相关资源
    最近更新 更多