11. marts 2004 - 20:29Der 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() { }
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.
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?
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...?
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.
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...?
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() { }
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.
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.
Synes godt om
Ny brugerNybegynder
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.