Re: How do u set classic ASP session variables from an ASP.NET application???
- From: "Steve C. Orr [MVP, MCSD]" <Steve@xxxxxxx>
- Date: Fri, 22 Apr 2005 21:12:57 -0700
You could use a 3rd party product such as this:
http://www.consonica.com/solutions/statestitch/
Or you can transfer values via a common database, or you can transfer values
between the two systems vai querystring, or posting hidden fields, etc.
Here's more information:
http://www.eggheadcafe.com/articles/20021207.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/ConvertToASPNET.asp
--
I hope this helps,
Steve C. Orr, MCSD, MVP
http://SteveOrr.net
"Chris Newby" <CANewbyMessageBoard@xxxxxxxxxxx> wrote in message
news:Odqpba4RFHA.3704@xxxxxxxxxxxxxxxxxxxxxxx
> My project currently requires that I integrate an ASP.NET application with
> an ASP application. One of the issues I'm having is that I have some very
> long strings being created in an ASP.NET application that need to somehow
> appear in a classic ASP session. The strings are too long for cookies or
> URLs and I'd like to avoid using a database or someother temporary server
> storage.
>
> So far what I've come up with is a .NET class that "spoofs" a post to an
> ASP
> page specifically designed to load its post data into the session. The
> post
> spoof involves a System.NET.HTTPWebRequest object, copying the HTTP
> headers
> from HTTPContext.Current.Request, and creating a post data byte array.
>
> What i've found so far is that even though it would appear my
> HTTPWebRequest
> object has a cookie in its headers containing the ASP session identifier
> for
> an already established ASP session, the request causes a new ASP session
> to
> be created. Also, it appears that my post data isn't making it to the ASP
> page that is responsible for mapping the post data into the ASP session.
>
> Any advice or information would be greatly apreciated//
>
> Below is the source code from my current class
> ============================================================
> /// <summary>
> /// <c>ASPSession</c> is an adapter for moving data from the .NET runtime
> to a traditional ASP session
> /// This is accomplished by maintaining a local collection of name-value
> pairs, then including these pairs in
> /// a POST request to a traditional ASP page that is ultimately
> responsible
> for committing the name-value pairs to an ASP session
> /// ** this means that in order to function correctly, this class requires
> the existence of the described receiver ASP page
> ///
> /// Sample VBScript code for ASP receiver page
> /// <%
> ///
> /// for each formKey in Request.Form
> /// if ( InStr( Upper( formKey ), "SESSIONKEY." ) ) then
> /// session( Replace( Upper( formKey ), "SESSIONKEY.", "" ) ) =
> Request.Form( formKey )
> /// end if
> /// next
> ///
> /// %>
> /// </summary>
> public class ASPSession
> {
>
> #region Fields
>
> private const String _ASP_RECEIVER_PAGE = "RuntimeToSessionReceiver.asp";
> private const String _ASP_RECEIVER_CONTENTTYPE =
> "application/x-www-form-urlencoded";
> private const String _ASP_SESSIONKEY_POST_PREFIX = "SessionKey.";
> private StringDictionary _aspSessionValues;
> private HttpWebRequest _aspReceiverRequest;
>
> #endregion
>
> #region Constructors
>
> /// <summary>
> /// Creates a new instance of ASPSession
> /// </summary>
> public ASPSession()
> {
> _aspSessionValues = new StringDictionary();
> configureASPReceiverRequest();
> }
>
> #endregion
>
> #region Public Members
>
> /// <summary>
> /// Gets or Sets name-value pairs for submission to an existing ASP
> session
> /// </summary>
> public String this[ String ASPSessionKeyName ]
> {
> get
> {
> if( _aspSessionValues.ContainsKey( ASPSessionKeyName ) )
> {
> return _aspSessionValues[ ASPSessionKeyName ];
> }
> else
> {
> return null;
> }
> }
> set
> {
> if( _aspSessionValues.ContainsKey( ASPSessionKeyName ) )
> {
> _aspSessionValues[ ASPSessionKeyName ] = value;
> }
> else
> {
> _aspSessionValues.Add( ASPSessionKeyName, value );
> }
> }
> }
>
> /// <summary>
> /// Executes an HTTP POST request containing the current collection of
> name-value pairs to the ASP receiver page
> /// * If it is determined that there are no name-value pairs to post, no
> request is made.
> /// </summary>
> public void SetVars()
> {
> if( _aspSessionValues.Count > 0 )
> {
> setHeaders();
> Byte[] postData = getPostData();
> if( postData != null )
> {
> _aspReceiverRequest.ContentLength = postData.Length;
> Stream sendStream = _aspReceiverRequest.GetRequestStream();
> sendStream.Write( postData, 0, postData.Length );
> sendStream.Close();
> HttpWebResponse response = ( HttpWebResponse )
> _aspReceiverRequest.GetResponse();
> StreamReader reader = new StreamReader(
> response.GetResponseStream() );
> String test = reader.ReadToEnd();
> reader.Close();
> }
> }
> }
>
> #endregion
>
> #region Private members
>
> private void configureASPReceiverRequest()
> {
> String receiverURL;
> if( String.Compare( HttpContext.Current.Request.ServerVariables[
> "HTTPS" ], "on", true ) == 0 )
> {
> receiverURL = "https://";
> }
> else
> {
> receiverURL = "http://";
> }
> receiverURL += HttpContext.Current.Request.Url.Host + "/" +
> _ASP_RECEIVER_PAGE;
> _aspReceiverRequest = (
> HttpWebRequest )System.Net.HttpWebRequest.Create( receiverURL );
> _aspReceiverRequest.ContentType = _ASP_RECEIVER_CONTENTTYPE;
> _aspReceiverRequest.Method = "POST";
> }
>
> private void setHeaders()
> {
> _aspReceiverRequest.Headers.Clear();
> foreach( String headerName in HttpContext.Current.Request.Headers )
> {
> try
> {
> _aspReceiverRequest.Headers.Add( headerName,
> HttpContext.Current.Request.Headers[ headerName ] );
> }
> catch( ArgumentException )
> {
> // Some headers are restricted (why, i'm not sure) and will cause an
> ArgumentException to occur
> }
> }
> }
>
> private Byte[] getPostData()
> {
> String sessionKey;
> String postDataString = String.Empty;
> foreach( DictionaryEntry aspSessionEntry in _aspSessionValues )
> {
> sessionKey = aspSessionEntry.Key.ToString();
> if( sessionKey.Length > 0 )
> {
> postDataString += String.Format(
> "&{0}={1}",
> HttpUtility.UrlEncode( String.Format( "{0}{1}",
> _ASP_SESSIONKEY_POST_PREFIX, sessionKey ) ),
> HttpUtility.UrlEncode( aspSessionEntry.Value.ToString() )
> );
> }
> }
> if( postDataString.Length == 0 ) return null;
> postDataString = postDataString.Substring( 1 );
> return Encoding.ASCII.GetBytes( postDataString );
> }
>
> #endregion
>
> }
>
>
.
- References:
- Prev by Date: using .ascx file to create server control
- Next by Date: Re: Web Custom Control (Button)
- Previous by thread: Re: How do u set classic ASP session variables from an ASP.NET application???
- Next by thread: Is This Possible: Client Side Web Parts Disappear
- Index(es):