Solution for ASP. Net failure to send session Status Request errors to the session Status Server

Source: Internet
Author: User
Solution to the failure to send a session Status Request error to the session Status Server
From: http://hi.baidu.com/tomyu/blog/item/836470f49bca73daf2d385ef.html2007-09-11 today an error occurred in the Office System
The error is as follows:
Exception details: system. Web. httpexception: unable to send a session Status request to the session Status server. Make sure you have started
ASP. NET State service, and the client and server ports are the same. If the server is on a remote computer, check
HKEY_LOCAL_MACHINE "system" CurrentControlSet "services" aspnet_state "Parameters" allowremoteconnection
To make sure that the server accepts remote requests.

Source error:

An unhandled exception is generated during the execution of the current Web request. You can use the following exception stack trace information to determine the cause and location of the exception.

Cause analysis:
In web. config, the mode of sessionstate is set to StateServer, but the server does not enable or change the service.

Solution:
1. In web. config, change the sessionstate mode to "inproc ";
2. Enable "ASP. NET State Service" in the service"

This is acceptable, but I don't understand why I want to do this. Later, I found the cause on the Internet.

Session model Overview
What is session? Simply put, it is the number that the server sends to the client. When a WWW server is running, several users may browse the website running on this server. When
When a user establishes a connection with the WWW server for the first time, he creates a session with the server, and the server automatically assigns a sessionid to the server to identify
The unique identity of the user. This sessionid is a random string consisting of 24 characters on the WWW server. We will see it in the following experiment.

This unique sessionid has great practical significance. When a user submits a form, the browser automatically attaches the user's sessionid to the HTTP header.
Is the browser's automatic function, the user will not notice), when the server finishes processing this form, the result is returned to the user corresponding to sessionid. Imagine if there is no sessionid, when
When two users register at the same time, how can the server know which user submitted the form. Of course, sessionid has many other functions, which we will mention later.

In addition to sessionid, each session contains many other information. However, for programming ASP or ASP. NET programs and, the most useful thing is that you can access
ASP/ASP. NET built-in Session object that stores their respective information for each user. For example, if we want to know how many pages users visit our website, we may
To access each page, add:

<%
If SESSION ("pageviewed") = "" then
Session ("pageviewed") = 1
Else
Session ("pageviewed") = SESSION ("pageviewed") + 1
End if
%>

You can use the following sentence to learn about several pages you have browsed:

<%
Response. Write ("You have viewed" & SESSION ("pageviewed") & "pages ")
%>

Some readers may ask: where does this seemingly array SESSION ("...") come from? Do I need to define it? In fact, this session object can be interpreted using ASP.
The built-in object of the WWW server. That is to say, this object has been defined for you in the ASP system, and you only need to use it. The... in the Session ("...") is changed.
Volume name. $ in session ("...") = $ is the value of the variable. You only need to write a sentence to access the value in the variable .. on every page of the user.

In fact, Asp has a total of seven built-in objects, including session, application, Cookie, response, request, server, etc. Similar objects are also available in other server-side scripting languages such as JSP and PHP, but they are not the same in terms of naming or usage.

ASP session functional defects
Currently, ASP developers are using session, but they have discovered the following defects in ASP session:

Process dependency: the ASP sessionstate is stored in the iisprogress, And the inetinfo.exe program is also used. When the inetinfo.exe process crashes, the information is lost. In addition, restarting or disabling the IIS service will cause information loss.
Limitations of the range of session Status usage: when a user accesses another website from one website, the session information will not be migrated. For example
There may be more than one WWW server. After a user logs on, he/she will go to various channels, but each channel is on a different server. What if he/she wants to share session information on these www servers?
What about it?
Cookie dependency: in fact, the client's session information is stored in the cookie. If the client completely disables the cookie function, it cannot enjoy the function provided by the session.
In view of the above defects of ASP session, Microsoft designers are designing and developing ASP. net session, and the above defects are completely overcome, making ASP. net session has become a more powerful feature.

Introduction to the Web. config file
Some ASP. NET programmers say: What is the Web. config file? I have never heard of it, but can the program I wrote work properly? Yes, you are right. No
The Web. config file program can run normally. However, if you create a large website, you need to make some overall configuration for the entire website, such as the language used to compile the entire website page.
In this case, you need to use the Web. config file. Although some options in the web. config file are
Configured through IIS, but if there are corresponding settings in Web. config, the configuration in IIS will be overwritten. In addition, the greatest convenience of the web. config file is that
On the ASP. NET page, access the settings in Web. config by calling the system. Web namespace.

There are two types of Web. config: the server configuration file and the web application configuration file, both named Web. config. In this configuration file, the current IIS server is saved
Which language is used for web pages in the server, the Application Security Authentication mode, and the session information storage mode. This information is saved using XML syntax. If you want to edit it
Use a text editor.

The server configuration file takes effect for all applications on all sites on the IIS server. In. NET Framework 1.0, the Web. config file of the server exists in "winnt" Microsoft. NET "Framework" v1.0.3705.

The Web application configuration file web. config is stored in various web applications. For example, the root directory "inetpub" wwwroot of the current website
If the web application is myapplication, the root directory of the Web application should be "inetpub" wwwroot "myapplication. If your
The website has only one web application. Generally, the root directory of the application is "inetpub" wwwroot. If you want to add a web application, add
The virtual directory with the application starting point is enough. The files and directories under this directory are considered as a web application. However, adding a web application through IIS will not generate
Web. config file. To create a web application with a web. config file, you must use visual
Studio. NET to create a web application project.

The Web. config configuration file of the Web application is optional and optional. If not, each web application uses the Web. config configuration file of the server. If yes, the corresponding values in the web. config configuration file of the server will be overwritten.

In ASP. NET, modifications to Web. config will automatically take effect immediately after they are saved. You do not need to restart the web application to take effect after modifying the configuration file in ASP.

Session configuration information in the web. config file
After opening the configuration file web. config of an application, we will find the following section:

<Sessionstate
Mode = "inproc"
Stateconnectionstring = "TCPIP = 127.0.0.1: 42424"
Sqlconnectionstring = "Data Source = 127.0.0.1; trusted_connection = yes"
Cookieless = "false"
Timeout = "20"
/>

This section describes how the application stores session information. The following operations mainly aim at this configuration section. Let's take a look at the meaning of the content contained in this section. The syntax of the sessionstate node is as follows:

<Sessionstate mode = "off | inproc | StateServer | sqlserver"
Cookieless = "True | false"
Timeout = "number of minutes"
Stateconnectionstring = "TCPIP = serverort"
Sqlconnectionstring = "SQL connection string"
Statenetworktimeout = "number of seconds"
/>

The required attribute is

Attribute option description
Mode setting: Where to store session information
Off is set to not use the session Function
Inproc is set to store sessions in the process, which is the storage method in ASP. This is the default value.
StateServer is set to store sessions in independent State services.
Sqlserver settings store sessions in SQL Server.

Optional attributes:

Attribute option description
Cookieless sets where the session information of the client is stored
Ture uses cookieless Mode
False uses cookie mode, which is the default value.
Timeout specifies the number of minutes after which the server automatically waives the session information. The default value is 20 minutes.
Stateconnectionstring is the name and port number of the server used to store session information in the status service, for example, "TCPIP = 127.0.0.1: 42424 ". This attribute is required when the mode value is StateServer.
Sqlconnectionstring sets the connection string when connecting to SQL Server. For example, "Data
Source = localhost; Integrated Security = sspi; initial
Catalog = northwind ". This attribute is required when the mode value is sqlserver.
Statenetworktimeout sets the number of seconds after the session state is stored in StateServer mode and the TCP/IP connection between the Web server and the server that stores the status information. The default value is 10 seconds.

Storage of client session Status in ASP. NET
In our previous session model introduction, we can find that the session status should be stored in two places: client and server. The client is only responsible for saving
Sessionid, while other session information is stored on the server. In ASP, the sessionid of the client is actually stored as a cookie. If the user
If the cookie is disabled in the browser settings, the user cannot enjoy the convenience of the session, or even access some websites. To solve the preceding problems
In ASP. NET, client session information is stored in two ways: Cookie and cookieless.

In ASP. NET, by default, session information is stored on the client using cookies. If you want to use cookieless on the client to store session information, the method is as follows:

Find the root directory of the current web application, open the Web. config file, and find the following section:

<Sessionstate
Mode = "inproc"
Stateconnectionstring = "TCPIP = 127.0.0.1: 42424"
Sqlconnectionstring = "Data Source = 127.0.0.1; trusted_connection = yes"
Cookieless = "false"
Timeout = "20"
/>

In this section, the cookieless = "false" is changed to: cookieless = "true". In this way, the session information of the client is no longer used.
The cookie is stored, but stored through the URL. Close the current IE, open a new IE, and re-access the Web application, you will see something similar to the following:

Http: // localhost/mytestapplication/(ulqsek45heu3ic2a5zgdl245)/default. aspx indicates the session ID of the client. Note that this information is automatically added by IIS and does not affect the normal connection.

Storage of server session Status in ASP. NET
Preparations

To better experience the experiment, you can create a page named sessionstate. aspx and add the following code to it.

<Scriptrunat = "server">
Sub session_add (sender as object, e as eventargs)
Session ("mysession") = text1.value
Span1.innerhtml = "session data updated! <P> your session contains: <font color = Red> "&"
Session ("mysession"). tostring () & "</font>"
End sub

Sub checksession (sender as object, EAS eventargs)
If (Session ("mysession") is nothing) then
Span1.innerhtml = "nothing, session data lost! "
Else
Span1.innerhtml = "your session contains: <font color = Red> "&"
Session ("mysession"). tostring () & "</font>"
End if
End sub

<Formrunat = "server" id = "form2">
<Inputid = "text1" type = "text" runat = "server" name = "text1">
<Inputtype = "Submit" runat = "server" onserverclick = "session_add"
Value = "add to session state" id = "submit1" name = "submit1">
<Inputtype = "Submit" runat = "server" onserverclick = "checksession"
Value = "View session state" id = "submit2" name = "submit2">
</Form>
<Hrsize = "1">
<Fontsize = "6"> <spanid = "span1" runat = "server"/> </font>

This sessionstate. ASPX page can be used to test whether session information is lost on the current server.

Store Server session information in the process
Let's go back to the section in the web. config file:

<Sessionstate
Mode = "inproc"
Stateconnectionstring = "TCPIP = 127.0.0.1: 42424"
Sqlconnectionstring = "Data Source = 127.0.0.1; trusted_connection = yes"
Cookieless = "false"
Timeout = "20"
/>

When the mode value is inproc, it indicates that the server is using this mode.

This method is the same as the previous ASP mode, that is, the server stores session information in the IIS process. When IIS is disabled or restarted, the information is lost. But this mode also has
The biggest benefit is the highest performance. It should be because all session information is stored in the IIS process, so IIS can quickly access this information, this mode of performance is better than that of External Store
Session information or session information stored in SQL Server is much faster. This mode is also the default mode for ASP. NET.

Now let's do a test. Open the sessionstate. ASPX page and enter some characters to store them in the session. Then, let's make
Restart IIS. Note that it is not to stop the current site and start again, but to right-click the node of the machine name in IIS and choose restart IIS. (To restart NT4
IIS must restart the computer. Microsoft returns to the sessionstate. ASPX page, checks the session information, and sends
The information is lost.

Store Server session information outside the process
First, let's open the management tool> service and find the name ASP. NET state.
Service, start it. In fact, this service is to start a process to save session information. After starting this service, you can choose-
> A process named aspnet_state.exe is displayed in the process, which stores session information.

Return to the preceding section in the web. config file and change the mode Value to StateServer. Open an Internet Explorer after saving the file.
On the sessionstate. ASPX page, save some information to the session. At this time, let's restart IIS and go back to the sessionstate. ASPX page.
Check the session information and find that it is not lost.

In fact, this method of storing session information outside the process not only means that the information can be stored in the local process, but also the session information can be stored in other server processes.
In this case, you not only need to change the mode Value to StateServer, but also need to configure the corresponding parameters in stateconnectionstring. For example, if your computing is
192.168.0.1. to store the session in the process of a computer whose IP address is 192.168.0.2, you need to set it as follows:
Stateconnectionstring = "TCPIP = 192.168.0.2: 42424 ". Of course, do not forget to be In the 192.168.0.2 computer
Install the. NET Framework and start the ASP. NET State Services Service.

Store Server session information in SQL Server
First, let's make some preparations. Start the SQL Server and SQL Server proxy services. In SQL
Server to execute a script file called installsqlstate. SQL. This script file will be stored in the SQL
Server creates a database for storing session information and an SQL statement for maintaining the session information database
Server proxy job. You can find the file in the following path:

[System Drive] "winnt" Microsoft. NET "Framework" [version]"

Then open the query analyzer and connect to the SQL
Server, open the file and run it. Wait a moment and the database and job will be created. In this case, you can open the Enterprise Manager and see a new one called aspstate.
Database. However, this database only contains some stored procedures and does not use user tables. In fact, session information is stored in the tempdb database.
In the aspstatetempsessions table, another aspstatetempapplications table stores
Image Information. These two tables are also created by the script just now. In addition, choose "manage"> "SQL ".
Server proxy-> job, It is also found that there is another job called aspstate_job_deleteexpiredsessions, which is actually
Delete expired session information from the aspstatetempsessions table every minute.

Then, we return to the Web. config file and change the mode Value to sqlserver. Note: You must also modify the sqlconnectionstring value in the following format:

Sqlconnectionstring = "Data Source = localhost; Integrated Security = sspi ;"

Data source refers to the IP address of the SQL Server server.
Server and IIS are a machine, just write 127.0.0.1. Integrated
Security = sspi means to use Windows Integrated Identity Authentication. In this way, accessing the database will be performed as ASP. NET. With this configuration, you can obtain
Userid = sa; Password = password for SQL Server authentication is more secure. Of course, if SQL
Server runs on another computer. You may need to maintain the consistency of both sides of the validation through the Active Directory domain.

Similarly, let's do a test. Add the session information to sessionstate. aspx, and you will find that the session information already exists in SQL
Server, even if you restart the computer, the session information will not be lost. Now you have fully seen what session information looks like, and it is stored again.
What you can do in SQL Server is what you play, haha.

Summary
Through this article, you can see that in terms of session management and maintenance, ASP. NET has made great progress over ASP. We can select a suitable method at will. For enterprise
This is undoubtedly beneficial to server synchronization, server stability, and reliability. I believe that with the support of powerful Microsoft, the new generation of e-commerce platforms will be built better!

At the same time, you will also find that the entire technology includes the integration of operating systems, Web Services, and database technologies. I believe that windows is not UNIX stable, and IIS does not
Apache stability, SQL
Server is not as powerful as Oracle, but who can perfectly link them together? Therefore, although Microsoft is not too strong in every aspect, if we integrate everything from Microsoft
Who dare say he is not powerful? Microsoft is Microsoft!

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.