2016-04-08 19 views
2

Ich bin neu bei IntraWeb und habe ein Problem. Um ein Login-Formular zu implementieren, habe ich Datensätze in der Benutzersession gespeichert. Aber wenn es darum geht, auf die Datasets zuzugreifen, erhalte ich einen Zugriffsverletzungsfehler. Ich habe herausgefunden, dass die Useressession nicht erstellt wurde. Jetzt bin ich etwas verwirrt, denn im Intraweb-Dokumentarfilm heißt es, dass die Usersession automatisch vom ServerController erstellt wird.Zugriffsverletzung beim Zugriff auf eine UserSession in Intranet

I-Zugang (will jeweils) der Datensatz wie diese UserSession.Dataset.open;

Ich benutze den IntraWeb Test in Rad Studio XE5 enthalten. Kann das das Problem sein? Falls dies nicht das Problem ist, wie kann ich manuell eine Userssession erstellen?

Vielen Dank

[Edit 13.4.16]

Das Problem der Evaluation Version war ich verwendet. Nach der Installation der Vollversion ist mein Problem verschwunden. Sie haben ihre Usersession.create-Prozedur geändert, indem Sie einen weiteren Parameter hinzugefügt haben. So stellen Sie sicher, dass Sie die aktuelle Version verwenden, wenn u das gleiche Problem haben: Danke für alle Antworten

+0

Ist UsserSession erstellt? – RBA

+0

Nr. Irgendwie wurde die Erstellungsaktion nicht ausgelöst. ich einen Haltepunkt in dieser Funktion machte im ServerController 'Verfahren TIWServerController.IWServerControllerBaseNewSession ( session: TIWApplication; var VMainForm: TIWBaseForm);' aber während dieser Prozedur Debuggen wurde nie genannt. – Chrispy1403

Antwort

0

Sie müssen die ‚Daten‘ innerhalb Sitzung

procedure TIWServerController.IWServerControllerBaseNewSession(
    ASession: TIWApplication; var VMainForm: TIWAppForm); 
begin 
    ASession.Data := TUserSession.Create; 
end; 

bewusst schaffen sein, dass in diesem Beispiel

TUserSession

ist eine definierte Benutzerklasse

type 
    TUserSession = class 
    public 
    UserCount: Integer; 
    end; 

werfen Sie einen Blick auf dieses Tutorial, das erklärt, wie die Sitzungen Management in IW getan wird - http://etutorials.org/Programming/mastering+delphi+7/Part+IV+Delphi+the+Internet+and+a+.NET+Preview/Chapter+21+Web+Programming+with+IntraWeb/Building+IntraWeb+Applications/

oder konsultieren Sie die technical documentation von Atozed zur Verfügung gestellt.

+0

Die Atozed-Dokumentation sagt _Die Sitzung eines Benutzers wird automatisch von IntraWeb verwaltet. Wenn eine neue Sitzung gestartet wird, erstellt IntraWeb eine neue Instanz einer TIWApplication (oder IWApplication in Visual Studio .NET) für den Benutzer und verfolgt sie automatisch._ Muss ich sie erneut erstellen? Wenn ich auf den ersten Link und das angegebene Beispiel schaue, sehe ich, dass sie nicht explizit die 'create' Prozedur aufrufen. – Chrispy1403

+0

Sie haben die App mit dem Assistenten erstellt? Auf der anderen Seite sagen Sie, dass Sie ein Login-Formular erstellen, und ich vermute, dass Ihr Controller seine Arbeit noch nicht beendet hat. Aber ohne den Quellcode deiner App sind das nur Vermutungen ... – RBA

+0

Ja, ich habe den Wizzard benutzt. Was meinst du mit "Controller hat seinen Job nicht beendet"? Ich habe den Code nicht vom Servercontroller geändert. Tatsächlich habe ich darüber nachgedacht, auch zu früh zu kommen. Also habe ich einen "Willkommen" -Bildschirm erstellt, wo du einen Knopf drücken kannst, um zum Login zu kommen. Wenn ich es richtig mache, sollte der Servercontroller bis dahin eine Usersitzung erstellt haben. Dieser Begrüßungsbildschirm wird als Hauptverzeichnis initialisiert 'TiwfStart.SetAsMainForm;' und ist mit Ausnahme der onClick-Prozedur identisch mit der generierten Unit aus dem Wizzard. Soll ich den Code der Site in die Hauptfrage stellen? Ty für deine Bemühungen! – Chrispy1403

0

Ich habe versucht, nur einen Kommentar hinzuzufügen, anscheinend brauche ich mehr Punkte dafür. Die Antwort wird gefunden, wenn Sie in die Antwort von RBA gehen, aber hier ist die Kurzform:

IW erstellt und verwaltet die Benutzersitzung automatisch. Die TIWUserSession ist jedoch nur Ihr Teil davon. Um Ihre eigenen Daten in der Sitzung zu haben, erstellen Sie die TIWUserSession und fügen Sie sie als .Data der Sitzung hinzu. In IWServerControllerBaseNewSession tun dies mit:

ASession.Data := TIWUserSession.Create(nil, ASession); 

Beachten Sie, dass die session Parameter des Verfahrens die Sitzung von IW verwaltet wird.

Um Ihre TIWUserSession zuzugreifen, ein Verfahren, in ServerController zu erstellen:

function UserSession: TIWUserSession; 
begin 
    Result := TIWUserSession(WebApplication.Data); 
end; 

dieses Verfahren im Abschnitt Schnittstelle Expose.

Dan

+0

Der erstellte Code sieht automatisch so aus: 'ASession.Data: = TIWUserSession.Create (nil);' Ich habe nur ein Argument für diese Prozedur. Ich habe irgendwo gelesen, dass dies ist, weil ich eine alte Version von intraweb benutze und tatsächlich verwende ich Version 14.0.0. Ich habe jetzt meine Anforderungen getestet, ohne die UserSession zu verwenden und werde bald die Vollversion kaufen. Dann habe ich eine aktuelle Version und hoffe, dass dies den Trick machen wird. Vielen Dank für Ihre Hilfe – Chrispy1403

+0

Ich denke, für 14.0.0 verwendet die automatische Code-Erstellung das ältere Formular. Sie haben die Codeerstellung um 14.0.13 geändert. Siehe: [link] (http://www.atozed.com/intraweb/history/XIV/index.EN.aspx) Die ältere Form sollte immer noch funktionieren, wie ich es verstehe. Siehe auch [link] (http://docs.atozed.com/docs.dll/development/Migrating%20to%20IntraWeb%20XIV.html#OnNewSession) –

0

Es fiel mir ein, daß wir „das falsche Problem zu lösen“ sein.

Sie haben angegeben, dass dies bei der Implementierung eines Anmeldeformulars aufgetreten ist. Sie haben außerdem angegeben, dass eine in WServerControllerBaseNewSession() festgelegte Unterbrechung nicht aufgetreten ist.

Haben Sie in ServerController "AuthBeforeNewSession" auf True festgelegt? Wenn ja, setze es auf False und sieh nach, ob sich das Verhalten ändert.

Dan

+0

"AuthBeforeNewSession" ist auf false gesetzt. – Chrispy1403