为什么WCF服务每个请求都返回错误的值?

时间:2012-12-04 13:54:48

标签: c# javascript wcf visual-studio-2008 soap

我有以下简单的WCF库,它是在Visual Studio 2008上开发的 当运行调用此wcf服务的WCFTestClinet / javascript(使用SOAP)时,我得到以下情况的错误值:
1. GetNumber - >输出:“你的号码是0”
2. SetNumber - >没有输出
3. GetNumber - >输出:“你的号码是0”而不是输出:“你的号码是8”!!!
任何人都可以解释为什么会发生这种情况,我该如何解决呢? 感谢

public class Service1 : IService1
    {
        private int Number;

        public string GetData(int value)
        {
            return string.Format("You entered: {0}", value);
        }

        public CompositeType GetDataUsingDataContract(CompositeType composite)
        {
            if (composite.BoolValue)
            {
                composite.StringValue += "Suffix";
            }
            return composite;
        }

        public string GetNumber()
        {
            return string.Format("Your number is : {0}", Number);
        }

        public void SetNumber()
        {
            Number = 8;
        }
    }

5 个答案:

答案 0 :(得分:5)

关于instances的全部内容。默认情况下,您的一个服务实例将被实例化per session;但是根据配置(for example using the BasicHttpBinding),可以按呼叫实例化服务(和/或甚至根本不支持会话)。

答案 1 :(得分:1)

可能是因为您已将WCF服务配置为每次调用而不是每次会话。

很好地回答了这些差异:https://stackoverflow.com/a/2542991/70386

答案 2 :(得分:0)

这是在同一个实例中吗?由于Number总是设置为0,否则

答案 3 :(得分:0)

我没有使用SOAP WCF,但在我与其他Web服务的合作中,我的理解是每次调用服务时都会创建一个新实例。这意味着无论你在SetNumber上做了什么都不适用于以下GetNumber,因为它是一个新实例。

如果您愿意,可以将该值设置为静态以保留调用之间的更改。

答案 4 :(得分:0)

这是因为默认情况下,WCF 3.5的实例模式为PerCall。这意味着对于WCF接收的每个调用,它会创建服务类的新实例,执行调用,然后销毁该实例。

如果您想拥有共享值,可以将服务配置为单例,如下所示:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
public class  Service1 : IService1