官方指导
https://docs.microsoft.com/zh-cn/azure/logic-apps/logic-apps-using-sap-connector#ise-prerequisites
PS: 不愧是世界第一的ERP,连微软官方都写操作指南,而且提供Azure支持……
Step 1
下载并安装 SAP Connector for dotnet 3.0
安装时,可以选择只解压出dll,或者安装并注册到GAL,对于部署机,建议选择后者,开发机解压拿到dll即可。
安装后,开发相关的dll主要是这些:
注意,由于SAP官方链接下载是需要客户账户的,所以此处请联系你的业主~
- 有些文章说需要安装客户端,其实不用。重要的是这个connector。 如果安装客户端,在bin目录里应该也能找到。
- 关于版本,我始终是秉承有最新用最新的,否则因为某个第三方调用限制你整个框架的版本,并不划算。
- 根据SAP官方的说明,最新版本的3.0.22是由.Net 4.0 和2.0两个版本支持的,但是4.0的x86和x64版本有一定的功能差异,x86是最全的。因此推荐你的应用程序使用32位运行
- 按照微软自己的文档,.Net 4.5~4.8 均可以支持这个版本。
Step 2
写测试代码,运行项目。
- 首先肯定测试编译,我这里只拷了以上四个dll到bin目录并没有通过。查了一些说法,说要求win7的系统环境,直接在win7下编译了一次,通过。
但是我的部署目标是win Server2016,在win7下编译通过后,移植肯定也不能用。疯狂翻博客后得到这么一些观点:
- 某个SAP的客户端测试程序是编译后win10可用的
- ASP.Net 项目提示找不到sapnco.dll依赖,解决方案是安装vc++2005
- VC++2010也行
我走的弯路是这些:
- 在win7的环境下编译,尝试整个移植到win10 x64机器上运行
- 解决win10 1903后系统不支持安装vc++ 2005方案
- 安装vc++2010
- win7 下编译的独立进程在win7的跳板机上运行,主服务RPC调用。
既然是弯路,肯定都没成功。虽然SAP贵为世界第一ERP,相关博客也意外的多,但是毕竟环境是比较早期的(客户的是02年上线的,操作系统竟然还可见win2000);
最接近成功的尝试是win7跳板环境。
我觉得太!不!优!雅!了
Step 3
既然是环境问题,总是能通过逆向依赖解决嘛。而且某个客户端测试工具可以在win10下运行这条信息,始终让我坚信这个问题是有解的!
Dependency工具扫描会给出大量的系统api调用,干扰检查依赖。又找工具吧,发现竟然VS自己就提供了极佳的辅助工具 —— 【VS DumpBin】
测试!
分别使用dumpbin 工具检查了四个SAP的dll,结果如下:
不熟悉系统dll的话,一个笨办法,通过search everything 逐个检查系统中有没有。 如果有且在系统GAL里,那就跳过。这样一来,最终锁定了这么几个dll:
- MSVCR100.dll
事实上,这个依赖是VC++2010的。至于前边测试的VC++2010安装后没有通过,最终确定是x86和x64的问题。
使用DependencyWalker 检查后会发现大量的Windows7 系统依赖,但微软官方说法是.Net Framework 4.0-4.8均支持,因此可以锁定问题到编译层面。
Step 4
直接给编译目录拷贝了MSVCR100.dll(x86)及四个SAP依赖,测试程序在x64下编译成功,并且运行时调用正确的报出了sap的异常信息。
解决了编译问题,我的系统是ASP.Net的,还需要解决部署问题。
前边说过,由于x86版的sap connector支持功能更完全,所以系统编译的时候需要指定平台为x86. iis Express测试成功后,部署到iis环境上时,需要注意指定对应的应用程序池为 【允许32位应用程序】