设为首页 收藏本站
查看: 943|回复: 0

如何在Windows Server 2008中使用Web网站或WebService连接SAP系统

[复制链接]

尚未签到

发表于 2015-4-29 12:37:58 | 显示全部楼层 |阅读模式
  连接SAP系统,并获取相关数据使用WinForm很容易就成功了,但是相同的代码移植到WEB中,却总是无法正常连接,时不时的就会有错误出现。解决这个问题花了比较长的时间,所以想在这里与大家分享一下我这菜鸟的经验,有什么不足希望各位大侠批评指正,谢谢。现在开始进入正题  
1 环境说明
  详见表1-1所示。
1-1 环境说明


  开发环境
  开发工具
  1. 操作系统:Windows Server 2008R2 64bit;
  2. Framework: dot net Framework 3.5;
  3. 3rd DLL(NCO3.0) SAP DLL是32bit的,而不是64bit。
  Visual Studio 2010 旗舰版 64bit
  关于环境需要说明的一点是SAP DLL为什么使用32bit?
  利用Visual Studio的开发连接SAP系统的项目,需要使用第三方动态链接库(dll),我们在Windows Server 2008 64bit的操作系统中,很自然的会想到应该使用64bit的SAP DLL,如果只是获取SAP数据,然后更新到我们现有的系统中,可以使用客户端程序或者WinForm程序,这个是没有任何问题的。
  但是同样的代码,当我们使用WEB进行发布调试的时候,就会有问题,对应的页面会冒红,说无法加载sapnco.dll文件。后来经过资料查询以及实验,我们得出一个结论就是:
  使用WEB连接SAP系统时,我们应该使用32位的SAP DLL作为第三方引用,所以可以在开发环境中添加一个32bit的SAP DLL文件。
2 成功部署网站连接SAP系统
  本节将通过问题解决的方式来讲解我们应该如何成功部署一个网站来,连接到SAP系统,并成功获取到SAP系统中的数据,供我们使用。
2.1  未能加载程序集”sapnco”
  当我们建立好一个WEB工程,编写好了连接SAP系统的代码后我们会很自然的去调试,看看我们写的是否正确。假设代码写的非常好且没有错误,经过调试发现我们想要的结果都能够成功的在页面中显示出来,很自然的我们会认为原来这东西如此简单,我们就搞定它了。可是奇怪的事情是,当我们发布部署这个工程后,发现无论如何网页都会冒红,出现图4-1所示的错误。
DSC0000.png
2-1 未能加载程序集sapnco

  怎么办? 一般情况下,在64bit的开发环境中开发项目,编译项目对应的目标平台都会是Any CPU,而我们这个项目中引用的SAP DLL,它是32bit的,所以我们必须将目标平台改为x86。
2.2    未能加载文件“我们的项目名”
  经过上面的修改后,我们经过编译部署,刷新后,在此打开网页的时候,依然会报错误,这个错误和上述错误差不多,只是未能加载文件后面的内容有所改变,详见图4-2所示。

DSC0001.png
2-2 未能加载文件“LgortWebApplication

  比较图2-1和图2-2的错误,从表面现象来看问题的性质是一样的,从而会误导我们觉得该目标平台是没有用的,很有可能会同一个方向去搜寻答案的,从而会做无用功。我们仔细看看图2-2所示的异常信息说明(也可以参考图2-3的内容)。

DSC0002.png
图2-3 异常信息说明

  关于这个异常信息,微软的官方解释如下:
  (1) 如果您的应用程序使用了 32 位组件,请确保该应用程序始终采用 32 位应用程序的运行方式。
  如果应用程序项目的“平台目标”属性设置为 AnyCPU,则编译后的应用程序在 64 位或 32 位模式中均可运行。 如果采用 64 位应用程序运行方式,则实时 (JIT) 编译器便会生成 64 位本机代码。 如果应用程序依赖于某个 32 位托管组件或非托管组件,则在 64 位模式中无法加载该组件。 若要纠正此问题,请将项目的“平台目标”属性设置为 x86,然后重新编译。
  (2) 确保未使用利用其他 .NET Framework 版本创建的组件。
  如果使用 .NET Framework 1.0 或 .NET Framework 1.1 开发的应用程序或组件尝试加载使用 .NET Framework 2.0 SP1 或更高版本开发的程序集,或者使用 .NET Framework 2.0 SP1 或 .NET Framework 3.5 开发的应用程序尝试加载使用 .NET Framework 4 开发的程序集,便会引发此异常。 BadImageFormatException 异常可能会报告作为编译时错误,或在运行时可能会引发该异常。 有关示例,请参见 BadImageFormatException 类。
  (3) 确保文件映像是有效的托管程序集或模块。
  当非托管动态链接库或可执行文件传递给 Load 方法进行加载时会引发此异常。
  根据调试能够成功,而编译发布却失败以及这些解释可以推测一下这个原因很有可能是因为项目发布之后并不是32位的运行环境,于是根据此异常找到的解决方案是:
  In IIS 7.5, in the Advanced Settings for the Application Pool associated with the Web Site hosting my Remote Object, I have simply changed the Enable 32-bits Application setting to true and the problem was gone.
  这句话的含义是让我们进入IIS管理器找到项目对应的IIS 应用池,然后将启用32位应用程序改为true。具体操作是右击对应的IIS应用池 -> 高级设置,修改为true。
  如图4-4所示。
DSC0003.png

2-4 启用32位应用程序修改为true

2.3    依然有错?
  经过上述修改后,重启应用池和网站,具体需不需要重启,进行操作的人可以自己尝试一下,但是在写这篇文档的时候,是经过重启操作的。这个时候发现网站可以正常打开的,还以为问题解决了呢,但是点击按钮或者其他事件的时候,如果是调用了SAP方法,程序依然会报出错误,而不能正常显示我们需要的数据。
  如果是WEB Service,当调用相关方法的时候,出现的错误是:SAP.Middleware.Connector.RfcSessionManager”的类型初始值设定项引发异常。
  如果是WEB项目程序,出现的错误如图4-5所示。
DSC0004.png

2-5 初始化参数异常

  解决这两个错误的方法是进入项目的应用程序池修改托管管道模式参数的值,将Integrated修改为Classic即可,详见图4-6所示。
  
DSC0005.png

2-6 托管管道模式修改为Classic

2.4    结束语
  经过上述的操作,解决了遇到的问题后,WEB或者WEB Service就能够成功的连接到SAP系统,并从中获取到我们需要的数据了,以上是我的一点经验总结,OVER。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-61935-1-1.html 上篇帖子: VS 2008 打包Windows 服务 下篇帖子: PostgreSQL 数据库在 Windows Server 2008 上安装注意事项
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表