我有以下简单的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;
}
}
答案 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