为什么我的列表在WCF帖子中超出范围?

时间:2014-05-20 13:16:25

标签: c# wcf

我一直在研究通过控制台应用程序托管的RESTful Web服务,以解决特定的用例(ASP.NET对我们当前的需求来说太过分了),我有点困惑。

首先,我按照MSDN directions创建了一个WCF Web服务。这很好用,我能够发出GET和POST请求并得到响应。

为了将此示例扩展到我们的用例,我需要将POST数据保存到集合中:

所以我更改了原始邮政编码:

public string EchoWithPost(string s)
{
    return "You said " + s;
}

 public List<string> Bc = new List<string>();
 public string EchoWithPost(string s)
    {
        this.Bc.Add(s);
        return "You said " + s;
    }

期望我的列表随着每个新的POST请求而增长。但情况并非如此。通过观察调试器,我确定每个新的POST请求都实例化了一个新列表,导致旧列表超出范围并丢失。

这是为什么?

2 个答案:

答案 0 :(得分:5)

您的WCF服务是作为新实例创建的,每个请求都处理它。根据您的需要,您可以做多件事。

  • 将列表实例更改为静态变量(不推荐)。
  • 将实例上下文模式更改为单个实例。这意味着所有wcf请求都由单个实例处理。缺点是您的服务一次只能处理一个请求。见here。如果您需要同时处理多个请求,也不建议这样做。
  • 将您的实例上下文模式更改为每个会话。基本上,为每个客户创建了一个服务实例。

我怀疑第三种选择最适合您的需求。

答案 1 :(得分:0)

因为每次执行新呼叫时都会创建一个新的服务实例。

您应该使用静态列表或使用其他类型的持久性。

public static List<string> Bc = new List<string>();
public string EchoWithPost(string s)
{
    this.Bc.Add(s);
    return "You said " + s;
}