在C#/。NET Core中使用SAP DI API的问题

2020-08-17 13:48发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


在与我合作的公司的一个项目中,我们有一个用C#编写的服务器应用程序,目标是.NET Core 2.2。 现在,该应用程序必须访问数据的现有数据库,该数据库属于我们的客户使用的SAP B1的现有安装。 首选的方法似乎是通过DI API。
我们的客户为我们提供了DI API和SAP B1 SDK的安装文件,并且已经获得一个程序的许可证。 最好在不同的物理服务器上运行我们的服务器应用程序(比运行B1和数据库的服务器)。 两台服务器均在Windows Server 2012上运行,并由我们的客户维护。 我目前正在尝试在运行Windows Server 2016的服务器上运行开发环境。

尝试使此设置正常运行有两个问题,第二个问题很可能是第一个问题的原因:
* SDK已安装在我们的开发服务器上,我们可以从库SAPBusinessOneSDK中引用SAPbobsCOM .dll并访问一些静态属性(例如,枚举SAPbobsCOM.BoDurations.du_Days)。 但是,一旦我们实例化Company对象(即SAPbobsCOM.Company c = new SAPbobsCOM.Company();),应用程序就会恰好在该行崩溃。 调试显示System.Runtime.InteropServices.COMException(0x80040154):由于以下错误,检索具有CLSID {632F4591-AA62-4219-8FB6-22BCF5F60090}的组件的COM类工厂失败:80040154未注册类(HRESULT的异常: 0x80040154(REGDB_E_CLASSNOTREG)。 在客户的目标服务器(未运行SAP B1的目标服务器)上运行已编译的测试程序时,也会发生同样的情况。
*在我们的开发服务器上安装DI API完全失败。 错误消息显示:"安装将终止;项目先决条件的安装在正确的位置不存在"。 安装程序在日志文件中最后一行说:"错误:先决条件安装失败,返回值:1603"
很明显,某些东西没有正确安装/设置。 由于SAP提供的文档非常明确地说明了如何设置这样的应用程序,因此我们目前只限于如何使数据库访问起作用。


旁边的注释:
访问运行B1的服务器并在那里运行我们的服务器应用程序并非不可能。 但是(如果可以实现),我们希望如上所述将服务器应用程序运行在专用服务器上。

所以问题是:如何正确设置它?
更准确地说:如何安装DI API? 第一个问题大概与第二个问题有什么关系,如果与第二个问题无关:如何解决第一个问题? (如SAP的文档和代码示例所建议的)是否有可能在与运行B1的物理服务器不同的物理服务器上运行使用DI API的应用程序?


任何建议将不胜感激!

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


在与我合作的公司的一个项目中,我们有一个用C#编写的服务器应用程序,目标是.NET Core 2.2。 现在,该应用程序必须访问数据的现有数据库,该数据库属于我们的客户使用的SAP B1的现有安装。 首选的方法似乎是通过DI API。
我们的客户为我们提供了DI API和SAP B1 SDK的安装文件,并且已经获得一个程序的许可证。 最好在不同的物理服务器上运行我们的服务器应用程序(比运行B1和数据库的服务器)。 两台服务器均在Windows Server 2012上运行,并由我们的客户维护。 我目前正在尝试在运行Windows Server 2016的服务器上运行开发环境。

尝试使此设置正常运行有两个问题,第二个问题很可能是第一个问题的原因:
* SDK已安装在我们的开发服务器上,我们可以从库SAPBusinessOneSDK中引用SAPbobsCOM .dll并访问一些静态属性(例如,枚举SAPbobsCOM.BoDurations.du_Days)。 但是,一旦我们实例化Company对象(即SAPbobsCOM.Company c = new SAPbobsCOM.Company();),应用程序就会恰好在该行崩溃。 调试显示System.Runtime.InteropServices.COMException(0x80040154):由于以下错误,检索具有CLSID {632F4591-AA62-4219-8FB6-22BCF5F60090}的组件的COM类工厂失败:80040154未注册类(HRESULT的异常: 0x80040154(REGDB_E_CLASSNOTREG)。 在客户的目标服务器(未运行SAP B1的目标服务器)上运行已编译的测试程序时,也会发生同样的情况。
*在我们的开发服务器上安装DI API完全失败。 错误消息显示:"安装将终止;项目先决条件的安装在正确的位置不存在"。 安装程序在日志文件中最后一行说:"错误:先决条件安装失败,返回值:1603"
很明显,某些东西没有正确安装/设置。 由于SAP提供的文档非常明确地说明了如何设置这样的应用程序,因此我们目前只限于如何使数据库访问起作用。


旁边的注释:
访问运行B1的服务器并在那里运行我们的服务器应用程序并非不可能。 但是(如果可以实现),我们希望如上所述将服务器应用程序运行在专用服务器上。

所以问题是:如何正确设置它?
更准确地说:如何安装DI API? 第一个问题大概与第二个问题有什么关系,如果与第二个问题无关:如何解决第一个问题? (如SAP的文档和代码示例所建议的)是否有可能在与运行B1的物理服务器不同的物理服务器上运行使用DI API的应用程序?


任何建议将不胜感激!

付费偷看设置
发送
3条回答
clever101
1楼-- · 2020-08-17 14:18

据我所知,Interop COM库不适用于.net Core。 您必须使用.net Framework。

我对这个问题有任何解决方案,请让我知道。

能不能别闹
2楼-- · 2020-08-17 14:21

对于#1,如果没有DI API,SAPBusinessOneSDK.dll可能无法运行,我认为您应该在以下位置安装DI API 您的开发服务器。

对于#2,您可能无法仅复制DI API文件夹并从那里安装,您可能需要复制整个B1安装文件夹/文件,然后运行'root'setup.exe或DI API安装程序 子文件夹中的.exe进行安装。

Cikesha
3楼-- · 2020-08-17 14:20

REGDB_E_CLASSNOTREG是未安装正确的DI API时的典型错误。

在开发和构建项目时,应将SAPBusinessOneSDK.dll视为DI API COM的接口。

将具有匹配平台(x86/x64)的DI API安装到.NET程序中。
请注意.NET项目的"构建"选项卡中的"首选32位"选项

一周热门 更多>