我们有一个使用SQL Server会话状态的ASP.NET网站.状态配置Web.config如下:
<sessionState mode="SQLServer" sqlConnectionString="data source=TheServer;
    User ID=TheUser;password=ThePassword;" cookieless="false" timeout="480"/>
但是有三种环境(开发/分期/生产).所有其他连接字符串配置如下:
<configuration>
    <connectionStrings>
        <add name="Development_Db1" connectionString="..."/>
        <add name="Production_Db1" connectionString="..."/>
    </connectionStrings>
</configuration>
在运行时,我们选择一个基于主机名连接到数据库.不幸的是,会话状态连接字符串似乎是硬编码的web.config.
有没有办法在运行时配置SQL Server会话状态,或者让它引用该connectionStrings部分的连接字符串?
有时我的网站上的一些请求开始挂起Session模块的RequestAcquireState状态.当螺旋开始所有请求超时时,我们需要在受影响的服务器上重新启动IIS.
我调查了很多,我得到的唯一结论是,当应用程序试图访问存储在Session中的用户数据时,某种程度上发生了死锁.
我能想到解决此问题的唯一选择是减少或停止在我的应用程序中使用Sessions.这是计划的一部分,但在我们完成之前需要一段时间.
我们使用IIS 7.5运行6台机器,在我们的负载平衡中运行proc StateServer和服务器亲缘关系.
有关如何解决此问题的任何提示或完全修复它而无需完全删除Sessions?

我想在asp.net mvc应用程序中的不同步骤中构造一个对象,每一步都是一个不同的页面.您在快速Web.Forms应用程序中存储在Session中的那种东西.
阅读它,Session在我看来并不像asp.net MVC的那样.但是我无法真正想到这种情况的其他替代方案,因为TempData和ViewData似乎也不合适,所以也许我错了.
当然,我可以将4个步骤放在一个页面中并显示/隐藏,但这不是我对问题的看法.我想听听你对MVC中Session的看法,如果它对于这种多步骤问题是一个很好的方法,或者你倾向于以其他方式做到这一点.
这非常类似于ASP.NET MVC中的Session变量问题,除了我不是在寻找如何访问Session,但是如果它是解决这个问题的最好方法,或者在Asp中有更好的东西.净MVC.
提前致谢
使用" InProc "存储的.NET的HttpSessionState似乎将会话变量键值视为不区分大小写.例如:
session["foo"] = 1;
session["Foo"] = 2;
Trace.Write(session["foo"].ToString()); // => 2
这种行为似乎没有记录,所以我想知道它是否仅仅是底层会话存储机制的副作用,还是故意由类本身实现的.由于C#将其他所有内容视为区分大小写,因此会话以不同的方式行事会有点令人不安.是什么赋予了?商店类型有所不同吗?是否与VB向后兼容?
这是我的环境:Win 7上的IIS7.5,.NET 4,App Pool Integrated
web.config中
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
</configuration>
Test.aspx文件
<%@ Page Language="C#" %>
<!DOCTYPE html>
<script runat="server">
    protected void OnAction(object sender, EventArgs e)
    {
        int count;
        status.Text = (int.TryParse(status.Text, out count) ? count + 1 : 0).ToString();
        Session["test"] = count;
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>IIS Session Hang Test</title>
    <script>
        var mutiPostback = function () {
            var e = document.getElementById('LinkButton1');
            e.click();
            e.click();
        };
    </script>
</head>
<body>
    <form id="Form1" method="post" runat="server">
        <asp:ScriptManager runat="server" ID="SM">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" …internet-explorer iis-7 session-state integrated-pipeline-mode
我的ASP.NET Web应用程序旁边有一个ASMX Web服务.现在,我需要将用户会话放入Webservice.为了测试这个我做了这个简单的方法:
    [WebMethod(EnableSession = true)]
    public string checkSession()
    {
        return HttpContext.Current.Session["userid"].ToString();
    }
所以,首先我登录我的网络应用程序,然后在浏览器中转到我的webservice并单击该自动生成的测试页面上的"checkSession".我在3台计算机上测试了这个.所有这3个都可以正常使用webapp(因此正在创建会话等),其中2个在调用webmethod时返回Session ["userid"]的值,但最后一台计算机返回"对象引用未设置为对象的实例"因为Session是null.
那么,这些计算机之间的区别是什么?为什么我的ASP.NET应用程序可以在所有计算机上获得会话但是webservice不能?
我有一个相当复杂的形式,其中有许多"步骤",由用户填写.某些步骤(将它们视为表单段)具有默认选项,但在单击"输入自定义值"时,它们会显示一个隐藏的字段集,用户可以在其中输入信息.这是一个示例
<div id="#s1_normal">
<input type="radio" name="mode" value="a"> Mode A
<input type="radio" name="mode" value="b"> Mode B
Choose one of the above for applying average coefficient 
values of "a" or "b" to 100% of your product or
<a href="#" onclick="toggleCustom('s1');">enter custom values</a>
</div>
<div id="#s1_custom">
%a: <input type="text" name="perc_a"> coeff. a <input type="text" name="coeff_a">
%b: <input type="text" name="perc_b"> coeff. b <input type="text" name="coeff_b">
Enter custom values above or 
<a href="#" onclick="toggleCustom('s1');">choose average values</a>
有几个这样的段,例如,#s1 ..#s7.这是我的任务.我想让用户保存表单的状态.因此,一旦用户填写了整个表单,选择某些段的平均默认值,并为其他段输入自定义值,用户就可以单击一个按钮并保存整个状态以便稍后解冻.我在想,如果我可以将状态保存在我可以序列化的对象中,我可以将它保存在db表或其他持久存储中.
用户可以稍后返回并重新构建整个上一个会话.
我该怎么做呢?有getAttributes插件http://plugins.jquery.com/project/getAttributes,并且有jQuery serialize方法,但我不能为我的生活开始.请朝正确的方向推动我.
我们正在构建一个ASP.NET MVC应用程序,该应用程序将部署在硬件负载平衡器后面,该负载平衡器支持缓存等.
我们的建议是手动定义负载均衡器应缓存哪些URL模式.这对我们来说是一个非常简单的过程,因为我们的"目录"页面是相对静态的,然后是"订单"页面,而不是.
必须避免在缓存页面上使用会话状态,因为负载均衡器会缓存整个响应 - 这包括发送的任何cookie.
理想情况下,会有一个属性可以应用于控制器或动作方法,允许选择性地使用会话状态,但似乎没有.我意识到,如果使用离开"会话区域",这样的方法会导致会话丢失 - 这很好.
除了重新实现整个ASP.NET MVC HTTP控制器...任何建议?
提前致谢.
我Web.Config在ASP.NET MVC 2项目中配置了我的文件:  
<sessionState mode="InProc" timeout="1"/>
并添加以下内容Global.asax.cs:  
protected void Session_End(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Session_End");
}
protected void Session_Start(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Session_Start");
}
Session_Start()在新用户访问网站时调用.我希望Session_End()在1分钟的空闲时间之后被召唤,但事实并非如此.我错过了什么吗?
通常使用Visual Studio的调试器是轻而易举的.通过本地扫描可以快速显示变量的值等.但是,我不知道如何找出会话状态变量中包含的值?任何人都可以帮我一把吗?让我们说我之后放了一个断点:
Session("first_name") = "Rob Roy"
如何从本地查看Session("first_name")中包含的值? session-state ×10
asp.net ×5
asp.net-mvc ×3
c# ×2
.net ×1
caching ×1
debugging ×1
forms ×1
httprequest ×1
iis-7 ×1
iis-7.5 ×1
jquery ×1
timeout ×1
variables ×1
web-config ×1
web-services ×1
zeus ×1