问题标签 [httpapplicationstate]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - 多个用户可以共享一个 HttpApplication 实例吗?
我使用了本文顶部的表格作为参考。我有三个问题:
1 - 多个用户(来自不同的物理位置)可以共享一个HttpApplication
实例吗?如果是这样,默认情况下会发生这种情况吗?
2 - 多个用户(来自不同的物理位置)可以共享一个HttpApplicationState
实例吗?如果是这样,默认情况下会发生这种情况吗?
3 - 一个 ASP.NET 应用程序的多个用户可以共享一个单例实例或一个静态变量值吗?如果是这样,默认情况下会发生这种情况吗?
感谢您清除此问题。
c# - 使用 Moq 模拟 HttpApplicationState 时似乎无法设置对象
我有一个动作过滤器,它在过滤器上下文的 HttpContext 的 HttpApplicationState 中设置一个对象。我希望在单元测试中具有此功能,但由于某种原因,该对象未在 HttpApplicationState 派生的基础 NameObjectCollectionBase 中设置。
我知道该功能有效,因为当我运行 MVC 应用程序时,它按预期工作。
如何设置我的测试以使其在应用程序状态下设置对象?我使用的是起订量,这里是到目前为止的一些代码。它失败了
这是代码。
这是到目前为止的测试。
static - c# .net 内存中持久性
我想为服务器发回的每个请求提供一个“用户消息”。如果没有用户消息,则消息返回空白。如果有,则在他们的请求完成后,每个用户屏幕上都会激活一个图标。
[编辑] “用户消息”是管理员为我正在部署的应用程序设置的内容。管理员可以在字段中输入文本并单击按钮以将此消息发送给系统的所有其他用户。每当其他用户执行任何类型的操作时,当前用户消息都会附加到 JSON 响应并由前端处理。
为了优化这一点,我希望将消息存储在内存中(而不是数据库中)。
我曾尝试使用静态。我曾尝试使用 HttpApplicationState。在这两种情况下,用户消息的值都会在一段时间后“消失”。经过一番研究,似乎静态和 HttpApplicationState 都受到IIS的影响,并且它决定回收应用程序池。(或一些这样的)
静态变量的这种波动是神秘的:它应该是静态的——只要IIS本身存在,这个变量就应该存在。它不应该依赖于某种“重置”或其他什么。HttpApplicationState 是我不完全理解的其他一些情况。
我想要一种将值存储在我可以依赖的非易失性变量中的方法。如果我今天设置此值,它应该在明天或下周出现,只要IIS没有停止并重新启动。
有什么帮助吗?
这是我根据以下接受的答案为解决问题所做的工作:
- 用户消息是有时事。因此,当某个管理员设置消息时,将响应存储在该时间点的数据库中并将其存储在 Application["UserMessage"] 对象中。
- 当用户往返时,用户消息的内存文本被添加到 json 返回值中。
- 管理员可以随时清除该消息,这将清除内存中的消息和数据库字段。
- 当 IIS 认为足够了并回收应用程序时,Application_Start() 方法(以及其他任务)还将从设置用户消息时存储的数据库值中重新播种用户消息(按照步骤 1)。
现在应用程序按预期工作。对于进入系统的每个用户请求,无需支付额外的费用进入数据库 - 用户消息始终来自内存。除此之外,很少为用户消息更新或加载数据库。
asp.net - HttpContext.Current.ApplicationInstance.Application 与 HttpContext.Current.Application
如果我想存储一些对象以跨页面和会话共享,我应该使用哪一个?
HttpContext.Current.ApplicationInstance.Application
或HttpContext.Current.Application
。
我正在使用HttpContext.Current.Application
,但只是在两者之间感到困惑。
asp.net - HttpApplicationState.RemoveAll() 线程安全吗?
在我的asp.net
应用程序中,我想在HttpApplicationState
.
我设置数据的代码如下所示:
当我阅读文档时,它说这HttpApplicationState
是隐式线程安全的。Application.Lock()
但是在许多博客上都写到我们应该Application.Unlock()
在将数据写入HttpApplicationState
.
另一方面,我找不到任何文档说我们应该在从HttpApplicationState
或清除数据时使用锁(使用Application.RemoveAll()
)方法。
我的问题是:
- 我们在调用时不应该注意线程安全
RemoveAll
吗?在我的应用程序中,一个线程可能正在读取数据,HttpApplicationState
而另一个线程可以调用RemoveAll
. - 在这种情况下,当可以同时从两个不同的线程读取和清除
HttpApplicationState
时,读取是否也不是线程安全的?
asp.net - Web 项目(类库)之外的 HttpApplicationState
我有一个 ASP.net Web 应用程序,它的业务逻辑依赖于一个单独的 DLL 类库项目。但是,我想在 DLL 项目中使用全局 HttpApplicationState。但这似乎是一个特定于 Web 项目的实现。
当然,我可以让特定类的构造函数(或方法)将 HttpApplicationState 作为参数,但我想知道是否有更雄辩的方式来做到这一点。我意识到我正在创造一些设计问题,但我真的很想能够在我的业务逻辑中利用全局的东西。
asp.net - 当 HttpApplicationState 可以由 HttpContext 处理时,为什么我们需要 StaticObjects 集合
我刚刚读到我们可以使用 Application 或 StaticObjects 访问 HttpApplicationState
我不清楚为什么我们需要两种不同的方法,因为我所看到的只是应用程序将帮助您在代码级别添加和读取,同时使用静态对象我们可以将它添加到 global.asax 的标记中并读取但不更新
这是唯一的区别还是我缺少静态对象的一些核心功能
c# - 使用 IIS 的 HttpApplicationState
我的任务是创建一个基于浏览器的 POS 应用程序,该应用程序将使用一台 PC 上的 Windows IIS 服务器托管。当其他几台 PC 和平板电脑都连接到同一网络时,它们将通过在其浏览器中输入托管它的 PC 的 IP 来访问应用程序的功能。该应用程序将在 ASP.NET 中使用 C# 作为 ASPX 页面背后的代码进行编程。
我的问题如下:如果我使用 HttpApplicationState ( var x = Application["testVariable"];
) 来存储变量,它们对于连接到站点的每个设备来说是本地的,还是所有设备都可以访问它们并且可以被覆盖?
示例:
iPad 连接并以用户 A 身份登录。我将变量设置Application["userName"]
为 string "Nathangrad"
。然后,PC 连接并以用户 B 身份登录。我将相同的变量设置为"OtherUser"
. 现在,如果我在 iPad 上打电话Application["userName"]
,我会得到"Nathangrad"
还是"OtherUser"
?
c# - 无法在 Web API 控制器中访问 HttpApplicationState
我有一个使用 .NET Core 2.0 制作的 REST API 应用程序。我想访问该Application
属性以存储所有应用程序的一些全局设置。
但是,它似乎在我的任何控制器中都不可用
Resharper 抱怨说
'HttpContext' does not contain a definition for 'Current' and no extension method 'Current' accepting a first argument ...
我尝试访问,HttpContext.Application
但它也不可用。
如何从控制器访问 HttpApplicationState ?
c# - ASP.NET MVC C#中全局应用程序对象的垃圾收集
我遇到了一个问题,将一个长时间运行的单例添加到 HttpApplicationState 中,该单例执行一些数据屏蔽 (GDPR),在后台运行一段时间后停止屏蔽数据。
很难调试,因为它只发生在我们的 UAT 环境中,而且通常会在一夜之间发生。
问题是数据屏蔽库是第三方的,并且仍在进行中(或在进行中的工作结束时)。
但如果有更好的 GC 知识的人可以查看下面的初始化代码,并确认这超出了 GC 域,我将不胜感激。
Translator.GetInstance() 是 GDPR 屏蔽/翻译单例的惰性加载器。所以它在用户第一次屏蔽/取消屏蔽数据时被初始化。