C# 来自多个客户端的多个ASP.NET请求如何共享信息?
想象一下,在一个网站上,个人客户可以看到彼此的存在——比如社交网络或聊天室 例如:C# 来自多个客户端的多个ASP.NET请求如何共享信息?,c#,.net,asp.net,multithreading,static,C#,.net,Asp.net,Multithreading,Static,想象一下,在一个网站上,个人客户可以看到彼此的存在——比如社交网络或聊天室 例如: 客户端1连接到我的网站。 后端C#代码更新一个静态字段,以指示Client1的存在。 客户端2连接到我的网站。 第二个请求的后端C#代码会看到第一个请求中存储在静态字段中的信息吗?我需要做些什么来保证我的ASP应用程序的这些独立实例共享静态数据吗?如果它们正在编辑的是静态字段,那么它们将在不同的用户之间共享。您唯一应该关心的是,静态对象没有在不同线程之间共享,这是因为您有不同的web服务器托管您的应用程序(例如负
客户端1连接到我的网站。
后端C#代码更新一个静态字段,以指示Client1的存在。
客户端2连接到我的网站。
第二个请求的后端C#代码会看到第一个请求中存储在静态字段中的信息吗?我需要做些什么来保证我的ASP应用程序的这些独立实例共享静态数据吗?如果它们正在编辑的是静态字段,那么它们将在不同的用户之间共享。您唯一应该关心的是,静态对象没有在不同线程之间共享,这是因为您有不同的web服务器托管您的应用程序(例如负载平衡体系结构),因为它将是不同的应用程序域 您还可以使用状态或在所有客户端之间共享信息 在ASP.net应用程序中,应用程序/缓存是跨应用程序共享信息的常用方式之一
但是,你需要首先考虑下面的内容以确保它符合你的特定需求。 使用应用程序状态时,您必须了解各种注意事项:
在上面的链接中引用“应用状态考虑”部分,以便在决定你的选择之前了解更多你需要考虑的事情。
< P>这完全取决于你想分享什么信息。各种选项可以是:- 数据库
- 缓存
- 应用程序变量
我会考虑使用WEB应用程序可以通过WCF,进行通信的Windows服务。 这将使你有很大的灵活性;它允许您对进程外的数据执行附加处理(例如,聚合状态统计信息,如“扩展网络中有50人在线”)。Windows服务还使您完全摆脱进程状态机制的任何限制。它将允许您自由地进行负载平衡,并允许多个应用程序使用其数据 如果数据是可消耗的,则使服务无状态。否则,请将部分/全部/定期数据保留到数据库中,这样即使服务和/或网站宕机,也可以恢复 最后,如果您构建的应用程序依赖于某个服务,则它是一个潜在的单点故障。最好的安装使用数据库或同步机制来确保进程外服务的冗余 编辑:为了提供有关原始问题的更多详细信息,静态成员可用于对ASP.Net站点运行的应用程序域的所有HTTP请求。值得一提的是,还可以(通过属性)使用不同的访问级别指定静态变量,例如
ThreadStaticAttribute
在实践中,静态变量是一种廉价/弱的解决方案。您必须手动同步访问,并且无法控制过期。您可以实现一个基于缓存的解决方案,无需额外的努力,也可以使用上述过程外方法来支持企业需求。您需要将此数据存储在两个会话都可以访问的位置,我建议您将其存储在缓存、应用程序或数据库中。看起来数据库毕竟是最佳选择。稳定性和可扩展性值得性能的提升,也值得与内存中的应用程序分离。