2

我是 IntraWeb 的新手,遇到了问题。为了实现登录表单,我将数据集存储在 Usersession 中。但是当涉及到访问数据集时,我得到一个访问冲突错误。我发现,没有创建用户会话。现在我有点困惑,因为在 Intraweb 纪录片中说,Usersession 是由 ServerController 自动创建的。

我像这样访问(分别想要)数据集 UserSession.Dataset.open;

我使用 Rad Studio XE5 中包含的 IntraWeb 试用版。这可能是问题吗?如果这不是问题,我该如何手动创建用户会话?

非常感谢

[编辑 13.4.16]

问题是我使用的评估版。安装完整版后,我的问题消失了。他们通过添加另一个参数更改了他们的 Usersession.create 过程。因此,如果您遇到相同的问题,请确保使用实际版本:感谢所有回复

4

3 回答 3

0

我试着只添加一条评论,显然我需要更多的积分。如果您进入 RBA 给出的回复,将会找到答案,但这是简短的形式:

IW 会自动创建和管理用户会话。然而,TIWUserSession 只是您的一部分。为了在会话中拥有您自己的数据,请创建 TIWUserSession 并将其添加为会话的 .Data。在 IWServerControllerBaseNewSession 中执行以下操作:

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

注意过程的ASession参数是IW管理的会话。

为了访问您的 TIWUserSession,请在 ServerController 中创建一个过程:

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

在接口部分公开该过程。

于 2016-04-10T05:18:46.527 回答
0

我突然想到我们可能正在“解决错误的问题”。

您指出这发生在您实施登录表单时。您还指出 WServerControllerBaseNewSession() 中设置的中断没有命中。

在 ServerController 中,您是否将“AuthBeforeNewSession”设置为 True?如果是这样,请将其设置为 False 并查看行为是否发生变化。

于 2016-04-12T03:28:01.313 回答
0

您需要在会话中创建“数据”

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

请注意,在此示例中

TUserSession

是用户定义的类

type
  TUserSession = class
  public
    UserCount: Integer;
  end;

看看这个教程,它解释了如何在 IW 中完成会话管理 - http://etutorials.org/Programming/mastering+delphi+7/Part+IV+Delphi+the+Internet+and+a+.NET+Preview /第+21章+Web+编程+with+IntraWeb/建筑+IntraWeb+应用程序/

或查阅atozed 提供的技术文档。

于 2016-04-08T08:56:51.433 回答