如何在wcf中为多个端点创建单个实例

如何在wcf中为多个端点创建单个实例,wcf,in-memory,Wcf,In Memory,场景: 我有单实例类型的wcf服务。它们将数据保存在内存中。 客户端调用该服务并获取数据,而无需访问数据库。 Wcf服务是windows服务中的主机。 在windows服务中,我使用了计时器,wcf服务在此基础上命中数据库并刷新数据 现在的问题是,当发生刷新调用时,数据客户端的请求受到影响并超时 现在我尝试了两个端点。一个用于消费者,另一个用于刷新。 这两种方法都能很好地工作,但即使刷新端点也能刷新数据。使用者端点提供旧数据是否刷新显示正确数据的端点 代码示例 [ServiceBehavior(

场景
我有单实例类型的wcf服务。它们将数据保存在内存中。 客户端调用该服务并获取数据,而无需访问数据库。 Wcf服务是windows服务中的主机。 在windows服务中,我使用了计时器,wcf服务在此基础上命中数据库并刷新数据

现在的问题是,当发生刷新调用时,数据客户端的请求受到影响并超时

现在我尝试了两个端点。一个用于消费者,另一个用于刷新。 这两种方法都能很好地工作,但即使刷新端点也能刷新数据。使用者端点提供旧数据是否刷新显示正确数据的端点

代码示例

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class Service1 : IService1
{
    List<string> Name;
    public Service1()
    {
        Name = new List<string>();
        CollectData1();
    }

    public List<string> CollectData()
    {
        CollectData1();
        return Name;
    }

    public List<string> CollectData1()
    {
        List<string> _name = new List<string>();
        string connectionString = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;
        using (SqlConnection sqlConnection1 = new SqlConnection(connectionString))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandText = "select name from test";
                cmd.Connection = sqlConnection1;
                sqlConnection1.Open();
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            string a = Convert.ToString(reader[0]);
                            _name.Add(a);
                        }
                    }
                }
            }
        }
        Name = _name;
        return Name;
    }

    public List<string> GetData()
    {
        return Name;
    }
}
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
公共类服务1:IService1
{
名单名称;
公共服务1()
{
Name=新列表();
收集数据1();
}
公共列表数据()
{
收集数据1();
返回名称;
}
公共列表收集数据1()
{
列表_name=新列表();
string connectionString=ConfigurationManager.connectionString[“DBConnectionString”].connectionString;
正在使用(SqlConnection sqlConnection1=新的SqlConnection(connectionString))
{
使用(SqlCommand cmd=new SqlCommand())
{
cmd.CommandText=“从测试中选择名称”;
cmd.Connection=sqlConnection1;
sqlConnection1.Open();
使用(SqlDataReader=cmd.ExecuteReader())
{
if(reader.HasRows)
{
while(reader.Read())
{
字符串a=Convert.ToString(读取器[0]);
_名称.添加(a);
}
}
}
}
}
名称=_名称;
返回名称;
}
公共列表GetData()
{
返回名称;
}
}

尝试使用静态变量:静态列表名称尝试使用静态变量:静态列表名称