Avatar billede cogitans Nybegynder
11. marts 2004 - 20:29 Der er 12 kommentarer og
2 løsninger

Intranet og database

Jeg har lavet en intranetside med en tilhørende database. Inde i den database(Access) er der kun 1 tabel, hvori jeg vil gemme computernavnet på de brugere, som har været inde på siden.
Jeg har også implementeret en løsning som virker fint, når jeg selv tester den. Men den fungerer ikke, når nogle andre brugere går ind på den. Hvordan løser jeg dette problem?

Her er der et udsnit af min løsning så vidt:
default.aspx.cs-filen:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace New
{
    /// <summary>
    /// Summary description for WebForm1.
    /// </summary>
    public class Default : System.Web.UI.Page
    {
        public New.DatabaseFtpManagement a=new New.DatabaseFtpManagement();

        private void Page_Load(object sender, System.EventArgs e)
        {
            a=new New.DatabaseFtpManagement();
            a.run();
        }
        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {   
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion
    }
}

DatabaseFtpManagement-filen:
using System;
using System.Data;
using System.Data.Odbc;
using System.Data.OleDb;
using System.Collections;

namespace New
{
    public class DatabaseFtpManagement
    {   
        public DatabaseFtpManagement()
        { 
        }
       
        public void run() 
        { 
            string strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Inetpub\\wwwroot\\New\\databaseFil.mdb";
            string tid1=String.Format(DateTime.Now.Day + "/" + DateTime.Now.Month + " Kl: " + DateTime.Now.Hour + ":" + DateTime.Now.Minute);
            string temp=System.Environment.MachineName;//B211
            string temp1=System.Environment.UserDomainName;//LucifersChild
            string temp3=temp1 + "(" + temp + ")";
            //testing
            //string[] m=System.Environment.GetEnvironmentVariables();
            //Console.WriteLine(m);
            //testing end
            string strSQL = "INSERT INTO Forbindelser(ComputerNavn, TidStart) VALUES ('" + temp3 + "', '" + tid1 + "')" ;

            // create Objects of ADOConnection and ADOCommand 
            OleDbConnection myConn = new OleDbConnection(strDSN); 
            OleDbCommand myCmd = new OleDbCommand( strSQL, myConn ); 
            try 
            { 
                myConn.Open(); 
                myCmd.ExecuteNonQuery(); 
            } 
            catch (Exception e) 
            { 
                Console.WriteLine("Oooops. I did it again:\n{0}", e.Message); 
            } 
            finally 
            { 
                myConn.Close(); 
            }
        }
    }
}

Er der nogle, som kan se, hvordan jeg kan løse problemet???
Avatar billede bennytordrup Nybegynder
12. marts 2004 - 10:51 #1
Dit problem er, at du bruger System.Environment, og den henter fra den maskine, hvor koden bliver afviklet, i.e. WebServeren.

Du kan via HTTP server variablerne få fat i IP-adressen på den maskine, der besøger siden. Jeg har gjort det via logning på en Web side, men jeg har ikke lige koden her.
Avatar billede cogitans Nybegynder
12. marts 2004 - 11:33 #2
Okay - det lyder som en fornuftig forklaring.
Men jeg vil meget gerne have noget kodeeksempel...er det noget, som du vil sætte herind, når du finder det?
Avatar billede cogitans Nybegynder
12. marts 2004 - 13:20 #3
Jeg har selv forsøgt med: string temp4=System.Web.HttpRuntime.AppDomainAppId;
hvilket giver dette som output: /LM/W3SVC/1/Root/New
...og det kan jeg jo ikke bruge til meget...?
Avatar billede bennytordrup Nybegynder
16. marts 2004 - 23:12 #4
Jeg har kigget lidt i hjælpen (det kode, jeg selv havde lavet, er forsvundet med en harddisk formattering :-( ), og du skal have fat i Request.ServerVariables. Det er en NameValueCollection med de navngivne server variable.

Du skal specielt have fat i HTTP_REMOTE_ADDR og HTTP_REMOTE_NAME.
Avatar billede cogitans Nybegynder
17. marts 2004 - 12:23 #5
Nu har jeg været ved at lege lidt med
using System.Web.Services.Description;
og
HttpAddressBinding g=new HttpAddressBinding();
men jeg kan altså ikke få noget brugbart resultat ud af det.
Så jeg håber, at der er andre, som kan finde noget brugbart kodeeksempel tl mig...?
Avatar billede bennytordrup Nybegynder
17. marts 2004 - 12:40 #6
Prøv at bruge

temp3 = Page.Request.ServerVariables["REMOTE_NAME"]
Avatar billede cogitans Nybegynder
17. marts 2004 - 13:08 #7
hmm - nu har jeg bl.a. prøvet med:
Page q=new Page();
string temp4=q.ID;

Men i alle mine forsøg klager den enten over det éne eller det andet.
Er der andre, som kan få det til at fungere?
Avatar billede bennytordrup Nybegynder
17. marts 2004 - 13:40 #8
Prøv at overføre this til DatabaseFtpManagement.Run(System.Web.UI.Page myPage)

Herefter skulle du have adgang til Page.Request.ServerVariables["REMOTE_NAME"] og Page.Request.ServerVariables["REMOTE_USER"]


Det kan godt være, at du skal have

using System.Web;
using System.Web.UI;

med i DatabaseFtpManagement-filen.
Avatar billede cogitans Nybegynder
17. marts 2004 - 14:56 #9
Hvordan kommer jeg ind i "run"-delen af DatabaseFtpManagement og skriver "this"?
Avatar billede bennytordrup Nybegynder
17. marts 2004 - 15:12 #10
default.aspx.cs-filen:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace New
{
    /// <summary>
    /// Summary description for WebForm1.
    /// </summary>
    public class Default : System.Web.UI.Page
    {
        public New.DatabaseFtpManagement a=new New.DatabaseFtpManagement();

        private void Page_Load(object sender, System.EventArgs e)
        {
            a=new New.DatabaseFtpManagement();
            a.run(this);
        }
        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {   
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion
    }
}

DatabaseFtpManagement-filen:
using System;
using System.Data;
using System.Data.Odbc;
using System.Data.OleDb;
using System.Collections;
using System.Web.UI;

namespace New
{
    public class DatabaseFtpManagement
    {   
        public DatabaseFtpManagement()
        { 
        }
       
        public void run(System.Web.UI.Pate fromPage) 
        { 
            string strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Inetpub\\wwwroot\\New\\databaseFil.mdb";
            string tid1=String.Format(DateTime.Now.Day + "/" + DateTime.Now.Month + " Kl: " + DateTime.Now.Hour + ":" + DateTime.Now.Minute);
            string temp=fromPage.Request.ServerVariables["REMOTE_HOST"]; //System.Environment.MachineName;//B211
            string temp1=System.Environment.UserDomainName;//LucifersChild
            string temp3=temp1 + "(" + temp + ")";
            //testing
            //string[] m=System.Environment.GetEnvironmentVariables();
            //Console.WriteLine(m);
            //testing end
            string strSQL = "INSERT INTO Forbindelser(ComputerNavn, TidStart) VALUES ('" + temp3 + "', '" + tid1 + "')" ;

            // create Objects of ADOConnection and ADOCommand 
            OleDbConnection myConn = new OleDbConnection(strDSN); 
            OleDbCommand myCmd = new OleDbCommand( strSQL, myConn ); 
            try 
            { 
                myConn.Open(); 
                myCmd.ExecuteNonQuery(); 
            } 
            catch (Exception e) 
            { 
                Console.WriteLine("Oooops. I did it again:\n{0}", e.Message); 
            } 
            finally 
            { 
                myConn.Close(); 
            }
        }
    }
}
Avatar billede bennytordrup Nybegynder
17. marts 2004 - 15:12 #11
Prøv at sammenligne mine ændringer med din kode.
Avatar billede bennytordrup Nybegynder
17. marts 2004 - 15:12 #12
public void run(System.Web.UI.Page fromPage)
Avatar billede cogitans Nybegynder
17. marts 2004 - 20:51 #13
Ahh - ja, det hjalp. Nu kan jeg da få fat på IP'en.
Men hvordan får jeg fat på clientens computernavn? Jeg har forsøgt med forskellige ting after "Page.Request", men der er altid noget galt...igen.
Avatar billede bennytordrup Nybegynder
18. marts 2004 - 08:43 #14
Når du har IP adressen på klienten, og du er på et lokalnet, så bør du kunne finde navnet på klienten ved hjælp af reverse DNS lookup.

Men der er du nødt til at finde anden hjælp - det har jeg overhovedet ikke haft rodet med.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester