gpt4 book ai didi

c# - 如何创建 WCF 服务中的所有 session 都可以访问的属性?

转载 作者:行者123 更新时间:2023-11-30 20:04:19 26 4
gpt4 key购买 nike

我有 nettcpbinding 服务并使用 Windows 服务托管它。该服务必须在网络上运行,并且它处理来自 100 多个客户端的传入消息。

问题:我想要一个所有 session 都可以访问的属性。像这样:

class a
{
list<string> strList=new list<string>();

class b{}
class c{}
...
}

在此示例中,所有类都可以访问 strList。我想要一个所有 session 都可以访问的列表(在该列表中添加或删除内容)。

服务配置是缓冲的,没有安全性。服务属性在这里:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
[ServiceContract(SessionMode = SessionMode.Required)]

编辑:我不想创建那只是一个例子的类。我只需要一个所有 session 都可以访问的列表。当你有 InstanceContextMode.PerSession 服务时,服务类将为每个客户端创建,然后每个客户端都有自己的服务类,现在我希望创建的每个 session 都可以访问一个公共(public)列表。

编辑 2:该列表在服务器中,只有服务器可以访问它,不需要将列表发送给客户端。它是用于计算某些东西的服务器变量。

最佳答案

您可以在服务类中使用静态属性,例如:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
[ServiceContract(SessionMode = SessionMode.Required)]
public class MyService : IMyService {

// this is your static data store which is accessible from all your sessions
private static List<string> strList = new List<string>();

// an object to synchronize access to strList
private static object syncLock = new object();

public void AddAction(string data) {

// be sure to synchronize access to the static member:
lock(syncLock) {
strList.Add(data);
}
}

}

WCF 将为每个连接到您的服务的新客户端创建一个新的 MyService 实例。他们都可以访问静态属性。

关于c# - 如何创建 WCF 服务中的所有 session 都可以访问的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13153529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com