使用 C++ 代码访问 RAD Server 的多租户模式

问题描述 投票:0回答:1

Embarcadero C++ Builder 11.2 架构师。

我尝试以编程方式访问 RAD 服务器中的多租户信息。未通过 EMSInternalAPI 提供访问权限来获取该信息,因此我尝试了以下操作:

.dfm 文件,localhost 是运行 IIS 和 Rad Server 的远程服务器:

object TenantModuleResource: TTenantModuleResource
  Height = 258
  Width = 441
  object qryTenants: TFDQuery
    Connection = TenantConection
    Left = 72
    Top = 40
  end
  object FDStanStorageJSONLink: TFDStanStorageJSONLink
    Left = 272
    Top = 128
  end
  object FDPhysIBDriverLink: TFDPhysIBDriverLink
    Left = 272
    Top = 48
  end
  object TenantConection: TFDConnection
    Params.Strings = (
      'Server=localhost'
      'User_Name=sysdba'
      'Password=masterkey'
      'Database=C:\Data\emsserver.ib'
      'InstanceName=gds_db'
      'Port=3050'
      'DriverID=IB')
    Left = 72
    Top = 128
  end
end

代码:

void TTenantModuleResource::Get(TEndpointContext* AContext, TEndpointRequest* ARequest, TEndpointResponse* AResponse)
{

    std::unique_ptr<TMemoryStream> oStr(new TMemoryStream());
    qryTenants->Close();
    qryTenants->SQL->Text = "SELECT tenantid, tenantname FROM tenants";
    qryTenants->Open();

    qryTenants->SaveToStream(oStr.get(), TFDStorageFormat::sfJSON);

    AResponse->Body->SetStream(oStr.release(), "application/json", true);
}

static void Register()
{
    std::unique_ptr<TEMSResourceAttributes> attributes(new TEMSResourceAttributes());
    attributes->ResourceName = "tenants";
    RegisterResource(__typeinfo(TTenantModuleResource), attributes.release());
}

并结束了未知“...Win32错误10060”的日志错误,据我所知,这是一个超时。我已经看到 Interbase 文档表明抛出该错误时没有客户端许可证。

我拥有 RAD 服务器站点许可证,但没有客户端许可证,但是我希望能够在不使用多租户控制台应用程序的情况下处理租户记录。

我的问题是有人知道如何以编程方式获取 emserver.ib 数据库中的租户数据吗?

c++ c++builder multi-tenant rad-server
1个回答
0
投票

希望有人会发现它的价值。我真希望我 7 个月前就知道了。

我在探索另一个问题的答案时遇到了这个问题,并且忘记了我什至发布了它。

但我已经找到答案了。如果您愿意的话,请允许我在序言中指出,C++ Builder 没有多租户 EMS 示例,更糟糕的是,如果您查看文档,您会发现有关它的信息很少。所以这是有用的信息。

您可以使用TEMSClientAPI组件获取租户信息。 TEMSClientApi 有一个名为 ConnectionInfo 的属性。通过此属性,您可以访问 MasterSecret、TenantSecret、TenantId 等参数。

下面是 REST.Backend.EMSApi.hpp 结构的实际定义,可以在您的 Embarcadero 文件夹中找到:“C:\Program Files (x86)\Embarcadero\Studio .0\include\windows TL”

祝您的 Rad 服务器工作顺利。

这是一个应该获取当前租户 ID 的小片段:

TEMSClientAPI* api = new TEMSClientAPI();
TEMSClientAPI::TConnectionInfo conf = api->ConnectionInfo;
String tenant_name = conf.TenantId;

来自头文件。

struct DECLSPEC_DRECORD TConnectionInfo
{
public:
    System::UnicodeString ApiVersion;
    System::UnicodeString ApplicationId;
    System::UnicodeString AppSecret;
    System::UnicodeString MasterSecret;
    System::UnicodeString UserName;
    System::UnicodeString Password;
    System::UnicodeString ProxyPassword;
    int ProxyPort;
    System::UnicodeString ProxyServer;
    System::UnicodeString ProxyUsername;
    System::UnicodeString BaseURL;
    System::UnicodeString LoginResource;
    System::Net::Urlclient::TValidateCertificateEvent OnValidateCertificate;
    System::UnicodeString TenantId;
    System::UnicodeString TenantSecret;
    int ConnectTimeout;
    int ReadTimeout;
    static void __fastcall _op_Initialize(/* out */ TEMSClientAPI::TConnectionInfo &Dest);
    __fastcall TConnectionInfo(const System::UnicodeString AApiVersion, const System::UnicodeString AApplicationID);
    TConnectionInfo() {}
};
© www.soinside.com 2019 - 2024. All rights reserved.