比较来自世界各地的卖家的域名和 IT 服务价格

在流中的会话中存储值 MVC

我是新的 MVC, 如此原谅我,如果我错过了什么。

在我的一个控制器中,我启动了一个执行一些处理的类并显示这样的字符串:


[HttpPost]
public ActionResult Check/string reg/
{
string sCarmodel;
GetRegInfo gri = new GetRegInfo/reg, out sCarmodel/;
Session["test"] = sCarmodel;

return View/"Check"/;
}


虽然一切顺利,输出 sCarmodel 它恰好存储在会话中,您可以在演示文稿中访问它们。 但是,我需要将一个类放在一个单独的流中,因为它完成了一些时间,我想返回视图 aschyncronosly. 所以我试过了:


[HttpPost]
public ActionResult Check/string reg/
{
var getreginfoThread = new Thread/
// =>
{
string sCarmodel;
GetRegInfo gri = new GetRegInfo/reg, out sCarmodel/;
Session["test"] = sCarmodel;
}
/;

getreginfoThread.Start//;

return View/"Check"/;
}


我知道我可以存储一个值 "sCarmodel" 在来自课程的数据库中,但我正在寻找一种跳过数据库的方法。 使用流,值 sCarmodel 未保存在会话中,会话变为
null

后来,当我试着得到它。

任何人都可以提供关于如何在流中获取类别的值的任何建议?

谢!

Edit:

由于所有的建议,因此解决了问题。
已邀请:

奔跑吧少年

赞同来自:

在请求处理期间将用户对象放在会话中。

发送链接到此用户对象背景。

设置背景流中的用户对象的属性。

确保您进行任何需要的同步。

风见雨下

赞同来自:

您需要以某种方式将会话传递到背景流中。 例如,参见
http://info.titodotnet.com/201 ... .html
.

顺便问一下,你为什么不使用
http://msdn.microsoft.com/en-u ... .aspx
?

三叔

赞同来自:

HttpContext 父母 / 对象所有者 Session object 它不会转移到新流,因此您的会话在主要的流中不可用。

我建议你回来 sCarmodel 从你的流中 async/await 并将其安装到主流中的会话中。

涵秋

赞同来自:

我建议您不要在Streams中使用会话对象,因为它不是无线的。 在 ASP.NET 每个请求都有自己的流和自己的会话。

你从未描述过真正的问题 /很遗憾/, 因此,我真的不知道你试图解决的是什么,但在任何情况下手动推出新的流并在任何情况下将数据进入会话不是解决方案。

如果您想异步执行以允许Web服务器为其他客户提供服务,请在后台提供某些内容,然后您可以查看异步控制器:
http://www.asp.net/mvc/tutoria ... mvc-4
再次,了解你想要实现正确的决定是非常有帮助的。

郭文康

赞同来自:

我解决了我的问题,同时保留了一个类实例 TempData. 另外,而不是流,我使用一个更好的任务。 这是我的决定:


[HttpPost]
public ActionResult GetRegInfo/string reg/
{
var gri = new GetRegInfo/reg/;
TempData["GetRegInfo"] = gri;

Action<object> action = /object obj/ =&gt; gri.Start//;
var t1 = new Task/action, "GetRegInfo"/;
t1.Start//;

return View/"bilforsakring"/;
}


后来我使用计时器 JavaScript 从 Ajax 并获得这样的价值:


[OutputCache/NoStore = true, Duration = 0/]
public ActionResult GetRegInfoAjax//
{
if /TempData["GetRegInfo"] != null/
{
var g = /GetRegInfo/TempData["GetRegInfo"];
return Content/g.sCarmodel/;
}
else
{
return Content/"null"/;
}
}


</object>

二哥

赞同来自:

但是,我需要将一个类放在一个单独的流中,因为它完成了一些时间,我想返回视图 aschyncronosly.

错误的。 太棒了

错误的

解决这个问题的方法。 在申请中 ASP.NET 如果您在持续存储中保存此工作仍然需要执行此操作,您应该永远不会返回。

在记忆中保存工作 /即用流或任务/ 这是一个不正确的决定。

正确的决策永久存储库 /例如,队列 Azure, MSMQ 或者 WebSphere MQ/ 要存储工作,然后具有单独的服务,可读取此队列执行适当的操作并将结果存储在另一个常数数据结构中。 然后你可以要求客户投票 /例如, HTTP 要求/ 数据结构 "result" 和/或通知客户 /例如, SignalR/ 关于保存结果。

我详细讲述了
http://blog.stephencleary.com/ ... .html
, 并且还给出了一个可以在那里使用的示例代码

绝对地

我们有信心你想去一个不安全的路线。

江南孤鹜

赞同来自:

重点不是该值未存储在会话中。 它。 问题是您的代码继续执行您创建的并行流,并且当它引用时
Session["test"]

, 他尚未由您的溪流指定。

您必须以某种方式重新组织您的代码。 此外,不建议在应用程序中运行线程 asp.net, 因为它非常灵巧。

EDIT

似乎它真的没有安装会话变量。 如果你真的想以这种方式这样做,你可以使用
CallContext

为了这:


CallContext.LogicalSetData/"CurrentSession", Session/;

var getreginfoThread = new Thread/
// =>
{
string sCarmodel;
GetRegInfo gri = new GetRegInfo/reg, out sCarmodel/;
var session = /HttpSessionState/CallContext.LogicalGetData/"CurrentSession"/;

session["test"] = sCarmodel;
}
/;

getreginfoThread.Start//;

return View/"Check"/;


你将不知何故等到这个数据是 null, 然后得到它们
Session["test"]

要回复问题请先登录注册