我正在开发一个ASP.NET网站.我想知道在会话状态模式下哪一个更好:InProc或SQL Server?我需要了解你在这个问题上的经验.
另一个问题是关于cookieless属性.如果我将其设置为true,我的网站是否有任何安全漏洞?在我在MSDN站点中看到的所有示例中,此属性都设置为false.
最后一个问题是关于Timeout属性.当我将其设置为InProc模式时,此属性是否影响我的会话生命周期?
我是ZERMQ的新手.ZeroMQ具有TCP,INPROC和IPC传输.我正在寻找在Winx64和python 2.7中使用python和inproc的例子,它们也可以用于linux.
此外,我一直在寻找UDP传输方法,但无法找到示例.
我发现的唯一例子是
import zmq
import zhelpers
context = zmq.Context()
sink = context.socket(zmq.ROUTER)
sink.bind("inproc://example")
# First allow 0MQ to set the identity
anonymous = context.socket(zmq.XREQ)
anonymous.connect("inproc://example")
anonymous.send("XREP uses a generated UUID")
zhelpers.dump(sink)
# Then set the identity ourself
identified = context.socket(zmq.XREQ)
identified.setsockopt(zmq.IDENTITY, "Hello")
identified.connect("inproc://example")
identified.send("XREP socket uses REQ's socket identity")
zhelpers.dump(sink)
Run Code Online (Sandbox Code Playgroud)
我正在考虑的用例是:UDP就像分发信息一样.使用TCP测试推/拉更快或者更快.
这是测试示例> ..............
服务器:
import zmq
import time
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("inproc://example2")
while True:
# Wait for next request from client
message = socket.recv()
print …Run Code Online (Sandbox Code Playgroud) 我与ZeroMQ试验,并试图获得一些工作.我的第一个想法是使用inproc传输设置REP/REQ,看看我是否可以在两个线程之间发送消息.以下大部分代码都来自clzmq示例,但它似乎不起作用.
服务器和客户端都绑定到传输,但是当客户端尝试Send阻止它并且只是坐在那里时.我没有ZeroMQ经验所以我不确定在哪里先看,任何帮助将不胜感激.这是违规(令人反感)的代码:
using System;
using System.Diagnostics;
using System.Threading;
using NUnit.Framework;
using ZMQ;
namespace PostBox
{
[TestFixture]
public class Class1
{
private const string Address = "inproc://test";
private const uint MessageSize = 10;
private const int RoundtripCount = 100;
[Test]
public void Should()
{
var clientThread = new Thread(StartClient);
clientThread.Start();
var serverThread = new Thread(StartServer);
serverThread.Start();
clientThread.Join();
serverThread.Join();
Console.WriteLine("Done with life");
}
private void StartServer()
{
// Initialise 0MQ infrastructure
using (var ctx = new Context(1))
{ …Run Code Online (Sandbox Code Playgroud) 我有一个ASP.Net MVC应用程序,它大量使用session来保存状态(包括大数据集合).目前,它托管在一个Web服务器上.会话设置为InProc的默认值.
出现了一个问题,即当许多用户在线时,应用程序会冻结某些用户.我想这是因为InProc会话不能很好地扩展,并且该进程只有很多可用内存.(如果内存需求超过可用内存会发生什么 - 它是否会换出磁盘?)
我有几个解决方案可以帮助实现可伸缩性.(a)Sql server会话状态; (b)配置会话状态以使用AppFabric缓存.第一个选项看起来是一个很好的解决方案,除了它会影响性能并要求存储的项目可序列化.
如何在单个Web服务器也用作缓存主机的环境中配置会话状态以使用AppFabric缓存(也称为Velocity)?在单一服务器环境中,这与InProc有何不同?这会提供比InProc更多的可扩展性和可用内存,还是基本上会达到相同的约束?
我试图在c#中找到inproc和outproc之间的区别.如果我在服务器上运行了一个DLL,我的问题是它会在inproc和outproc中运行吗?性能方面哪个过程更好?
我有In-Proc会话状态的生产问题.
我们的应用程序基于MVC 3 .NET框架,并集成到我们运行Sitecore CMS的站点中.
我们的用户在应用程序流程中随机地经历了"对象引用未设置为对象的实例".
在广泛的日志记录和跟踪之后,我们可以得出结论,这是在会话对象返回null时引起的.
这是关于我们发现的和我们所知道的一些细节.
附注:由于我们的Sitecore CMS,我们必须使用In-Proc会话状态.因此,改变设计不是一种选择.
我有一个理论,它可能与会话锁定或从并发访问尝试损坏.
在我们的应用程序中,我们看到很多地方出现了这个问题,当用户被javascript(windows.location)重定向时.
并且在正在进行异步ajax调用的区域中.
我们一直在摸不着头脑,我想知道是否有人会对这个问题有什么见解或理论?
谢谢
添加注意:
@Mystere && @ H27Studio,所以我也发现了一些与sessionID或会话重置问题有关的内容.在某些情况下,我们发现在页面重定向上它会触发对方法的两次重复GETS调用,第一次调用缺少一个sessionID并随机地重定向到一个服务器(这是因为来自负载均衡器的服务器持久会话是基于客户端IP,sessionID和其他头信息创建唯一会话以将客户端保留在一个服务器上).当我们的重定向页面使用window.location时,每次在流程中都会发生这种情况.
如果bad,no sessionID调用命中同一服务器,这将导致客户端出现"Object reference not set .."问题.(这可能是因为没有sessionID的第一个错误调用导致应用程序创建一个覆盖原始会话对象的新会话)所以即使在正确的sessionID传递到应用程序的第二次调用中,我们也会发现会话对象包含null .
因此,我认为重复调用存在问题,即清除会话对象,这不确定导致开始的原因或原因.
任何人都有这方面的线索?谢谢
更新: 我们计划采取这些措施以解决此问题.
一旦我们将其部署到生产中,就会发布更改的效果.
感谢所有的评论.
我进行了以下简单的测试:
protected void Page_Load(object sender, EventArgs e)
{
if (Session["dt"] == null)
Session["dt"] = DateTime.Now;
Session["dt"] = ((DateTime)Session["dt"]).AddYears(1);
Response.Write(Session["dt"].ToString());
}
Run Code Online (Sandbox Code Playgroud)
并发回发的结果如下:
1- 13/11/2015 10:00:00 2- 13/11/2016 10:00:00 3- 13/11/2017 10:00:00 4- 13/11/2018 10:00:00 5- 13/11/2019 10:00:00 6- 13/11/2020 10:00:00 ...
这清楚地表明会话变量正在更新.在MSDN上,您可以找到以下内容:http: //msdn.microsoft.com/en-us/library/ms178581(v = vs.100).aspx
您可以通过将会话状态模式设置为Off来禁用应用程序的会话状态.如果要仅为应用程序的特定页面禁用会话状态,可以将@Page指令中的EnableSessionState值设置为false.EnableSessionState值也可以设置为ReadOnly,以提供对会话变量的只读访问.
我们几乎在应用程序的每个页面上执行读/写操作.但是,这会阻止同时为同一客户端运行两个http请求.第一个请求应该完成,直到服务器处理第二个请求.经过一些研究,显然是由于会话的独占锁定.为了好奇,我们尝试将会话状态设置为ReadOnly,似乎仍然可以编辑,没有定义独占锁.
问题:
1- Readonly是否意味着Readonly(因此这里有一个asp中的错误)或者其他的东西?
2-只要会话似乎可以使用ReadOnly状态编辑,有什么可担心的,你认为在生产环境中继续使用它是否安全?
谢谢
我们已经将Redis会话状态提供程序实现到我们的Web应用程序,它就像一个魅力,但我想知道如果redis服务器出现故障或Web服务器无法连接到redis服务器会发生什么.
有没有办法使用InProc会话状态管理作为Redis的故障转移?我找不到任何关于声明多个会话状态提供程序的文档,因此如果redis失败,系统可以继续使用inproc.(我接受在redis中丢失会话状态并在发生故障时从头开始并且再次丢失会话状态inproc并且如果redis可用则再次从头开始)
问题1:与此处说明的默认进程间通信相比,用于向子进程发送消息的区别到底是什么?ZeroMQ
问题2:对于直接进行儿童沟通的过程,哪个更合适?(更快)
问题3:文档说:Creates an IPC channel,它使用什么类型IPC?TCP?插座?
我使用它作为样板,除了在同一个程序中我还有一些goroutine是工作者并连接到后端端点,tcp://127.0.0.1:5560.
我想要做的是让它通过更有效的方式连接,例如ipc://,inproc://,甚至是unix套接字.我试过那些,但它没有用.ZeroMQ的频道不合适吗?
那么如何在没有tcp的情况下将不同的goroutine与ZeroMQ上下文连接起来呢?还有更好的选择吗?
更新:代码:
// Simple message queuing broker
// Same as request-reply broker but using QUEUE device
//
// Author: Brendan Mc.
// Requires: http://github.com/alecthomas/gozmq
package main
import (
zmq "github.com/alecthomas/gozmq"
)
func startWorker() {
context, _ := zmq.NewContext()
defer context.Close()
worker, _ := context.NewSocket(zmq.REP)
//err := worker.Connect("ipc:///backend") // Tried it, but nothing
//err := worker.Connect("inproc:///backend") // Tried it, but nothing
err := worker.Connect("tcp://127.0.0.1:5560") // this works
if err != nil {
fmt.Println(err)
}
for { …Run Code Online (Sandbox Code Playgroud)