EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:以集成模式或通过中间层应用程序服务器调用直接SQL查询

默认情况下,你不能执行直接的SQL查询存储过程集成模式中的安全系统,或者在中间层应用服务器使用。该“通过ICommandChannel传输请求被安全引擎内禁止”当你执行的相应方法发生异常会话

注意

当应用程序版本更改时,请勿使用此方法来处理数据库更新。而是使用ModuleUpdater类的受保护方法。

若要允许在这些配置中执行直接查询和存储过程,请在实例化SecuredObjectSpaceProvider对象后将SecuredObjectSpaceProvider.AllowICommandChannelDoWithSecurityContext属性设置为true。默认情况下,此对象是在XafApplication.CreateDefaultObjectSpaceProvider方法中创建的,该方法在WinApplication.cs(WinApplication.vb),WebApplication.cs(WebApplication.vb)和MobileApplication.cs(MobileApplication.vb)文件中被覆盖。

protected override void CreateDefaultObjectSpaceProvider(CreateCustomObjectSpaceProviderEventArgs args) {
    // ...
    ((SecuredObjectSpaceProvider)args.ObjectSpaceProviders[0]).AllowICommandChannelDoWithSecurityContext = true;    
}

如果使用的是中间层应用程序服务器,请打开位于应用程序服务器项目中的Program.csProgram.vb)文件,并修改创建ServiceHost对象的代码,如下所示:

IDataStore dataStore = XpoDefault.GetConnectionProvider(connectionString, AutoCreateOption.SchemaAlreadyExists);
Func<IDataLayer> dataLayerProvider = () => new ThreadSafeDataLayer(XpoTypesInfoHelper.GetXpoTypeInfoSource().XPDictionary, dataStore);
ServiceHost serviceHost = new WcfXafServiceHost(dataLayerProvider, dataServerSecurityProvider, true);

如果将Application Server作为Windows服务运行,则可以在ApplicationServerService.csApplicationServerService.vb)文件中使用相同的代码。

现在,您可以访问对象空间,将其转换为XPObjectSpace类型,使用XPObjectSpace.Session属性获取Session对象,然后调用Session.ExecuteQuery,Session.ExecuteSproc或其他合适的方法。

转载保留此链接,注明出处