จะจัดเก็บสถานะเซสชัน asp.net ใน SQL Server สำหรับแอปพลิเคชัน Asp.Net MVC 4 หรือแอปพลิเคชัน WebRole ได้อย่างไร

ฉันจะจัดเก็บสถานะเซสชันใน SQL Server สำหรับ Asp.net mvc4 หรือแอปพลิเคชัน Windows Azure Web Role ได้อย่างไร

แก้ไข

เหตุใดฉันจึงได้รับข้อผิดพลาดนี้

ข้อผิดพลาด HTTP 500.23 - ข้อผิดพลาดเซิร์ฟเวอร์ภายใน
ตรวจพบการตั้งค่า ASP.NET ที่ไม่ได้ใช้ในโหมดไปป์ไลน์ที่มีการจัดการแบบรวม

web.config ของฉันมีลักษณะดังนี้:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="webAssets" type="Telerik.Web.Mvc.Configuration.WebAssetConfigurationSection, Telerik.Web.Mvc" requirePermission="false" />
      <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
      <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <!--
    <connectionStrings>
        <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet2012620142020;Integrated Security=True" providerName="System.Data.SqlClient"/>
    </connectionStrings>
  -->
  <connectionStrings>
    <!--<add name="HotDeployDbContext" connectionString="data source=JOE-WANG\WQ;initial catalog=HotDeploy;user id=sa;password=wq187731" providerName="System.Data.SqlClient"/>-->
    <!--<add name="HotDeployDbContext" connectionString="data source=tcp:z1782cwqws.database.windows.net,1433;initial catalog=HotDeployDB4CloudService;user id=hotdeployadmin@z1782cwqws;password=accela.123;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" providerName="System.Data.SqlClient" />-->
    <add name="HotDeployDbContext" connectionString="data source=tcp:xxxxxxxx.database.windows.net,1433;initial catalog=xxxxx;user idxxxxx@xxxx;password=dddd.123;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="true" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />

  </appSettings>
  <system.web>
    <customErrors mode="Off" />
    <httpRuntime executionTimeout="14400" maxRequestLength="716800" />
    <compilation targetFramework="4.0" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
        <add namespace="Telerik.Web.Mvc.UI" />
      </namespaces>
    </pages>
    <profile defaultProvider="DefaultProfileProvider">
      <providers>
        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </profile>
    <membership defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>
    <roleManager defaultProvider="DefaultRoleProvider">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </roleManager>
    <!--
    <sessionState mode="InProc" timeout="30" customProvider="DefaultSessionProvider">
      <providers>
        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </sessionState>
    <httpHandlers>
      <add verb="GET,HEAD" path="asset.axd" validate="false" type="Telerik.Web.Mvc.WebAssetHttpHandler, Telerik.Web.Mvc" />
    </httpHandlers>-->
    <!--before I added sessionState element . everything is fine.-->
    <sessionState mode="SQLServer" cookieless="true" 
    sqlConnectionString="data source=10.50.70.81; userid=sa; password=wq187731"
    timeout="300" 
    sqlCommandTimeout="10" />
  </system.web>
</configuration>
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="3000000000" />
      </requestFiltering>
    </security>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <directoryBrowse enabled="true" />
    <handlers>
      <remove name="asset" />
      <add name="asset" preCondition="integratedMode" verb="GET,HEAD" path="asset.axd" type="Telerik.Web.Mvc.WebAssetHttpHandler, Telerik.Web.Mvc" />
    </handlers>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.WindowsAzure.StorageClient" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.7.0.0" newVersion="1.7.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

</configuration>

หากฉันเปลี่ยนกลุ่มแอปพลิเคชันเป็นโหมดคลาสสิก ฉันได้รับหน้าข้อผิดพลาด IIS ด้านล่าง ..

ข้อผิดพลาด HTTP 403.14 - ถูกห้าม
เว็บเซิร์ฟเวอร์ได้รับการกำหนดค่าไม่ให้แสดงรายการเนื้อหาของไดเรกทอรีนี้


person Joe.wang    schedule 19.10.2012    source แหล่งที่มา
comment
...อาจไม่ใช่ความคิดที่ดีที่สุดในการระบุ IP และรหัสผ่าน sa ของเซิร์ฟเวอร์ฐานข้อมูลของคุณ :/ ใช่ ฉันรู้ว่า IP อยู่ในช่วงที่อยู่ส่วนตัว แต่ก็ยังไม่ใช่ความคิดที่ดี   -  person J0e3gan    schedule 14.02.2014
comment
:) มีปัญหาด้านความปลอดภัยด้านความปลอดภัยบ้างไหม? ฉันไม่สามารถจินตนาการได้   -  person Joe.wang    schedule 14.02.2014


คำตอบ (1)


ผู้ให้บริการสถานะเซสชันได้รับการกำหนดค่าใน web.config ของคุณโดยใช้ sessionState สำหรับเซิร์ฟเวอร์ SQL คุณตั้งค่า mode เป็น SQLServer และกำหนดค่าสตริงการเชื่อมต่อ สำหรับ Azure คุณสามารถดูคำตอบต่อไปนี้ ซึ่งครอบคลุมตัวเลือกต่างๆ

person Darin Dimitrov    schedule 19.10.2012
comment
ช่วยตอบได้ดีมาก. โปรดดูโพสต์ของฉัน ฉันแก้ไขอีกครั้ง ขอบคุณ - person Joe.wang; 19.10.2012
comment
ฉันเห็นว่าคุณกำลังใช้ส่วน <httpHandlers> เพื่อลงทะเบียนตัวจัดการ asset.axd ที่กำหนดเองบางตัว แต่ถ้าคุณใช้งานในโหมด Integrated Pipeline คุณควรใช้ส่วน system.webServer/handlers เพื่อลงทะเบียนตัวจัดการแบบกำหนดเอง ไม่ใช่ system.web/httpHandlers - person Darin Dimitrov; 19.10.2012
comment
ฉันลบองค์ประกอบ system.web/httpHandlers ใน web.config แล้ว แต่ฉันได้รับข้อผิดพลาดเดียวกัน ช่วย. - person Joe.wang; 19.10.2012
comment
กรุณาแสดง web.config ของคุณแบบเต็มตามที่เป็นอยู่ในขณะนี้ คุณไม่ได้รับรายละเอียดเพิ่มเติมเกี่ยวกับข้อยกเว้นและส่วนใดที่ไม่สามารถใช้งานได้ใช่หรือไม่ โปรดโพสต์การติดตามสแต็กข้อยกเว้นแบบเต็มของคุณ ดูที่เซิร์ฟเวอร์ EventLog ด้วย อาจมีข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาด - person Darin Dimitrov; 19.10.2012
comment
โปรดตรวจสอบ web.config ฉบับเต็ม BTW ก็ไม่ใช่ข้อยกเว้นว่าเป็นหน้าข้อผิดพลาด IIS คุณรู้ไหมว่ามันเกิดขึ้นก่อนที่เว็บแอปพลิเคชันจะทำงาน ขอบคุณ - person Joe.wang; 19.10.2012
comment
ฉันแน่ใจว่าฉันได้ล้างบันทึกก่อนที่จะพบข้อผิดพลาดนี้ ฉันไม่เห็น eventlog ใหม่ที่สร้างขึ้น - person Joe.wang; 19.10.2012
comment
แอปพลิเคชันของคุณใช้งานได้หรือไม่หากคุณแสดงความคิดเห็นที่โหนด sessionState - person Darin Dimitrov; 19.10.2012