遇到了一点小问题。具体如下:
开发好的B/S程序在debug的时候可以正常的调用sap函数并获取数据,但是将程序打包好发布到IIS上的时候。问题就出来了。附加进程调试的时候,程序在 if (conn.Logon(null, true)) 这个地方停下来了。初步诊断未iis调用sap有问题。sap的版本为730,iis版本为iis7.有了解这个的朋友么? 应用程序池已经标识为域用户中的最高权限用户。
conn.Logon 是通过 socket ,还是 com 技术连接的 sap 服务器?
com
@小肥羊同学: 那 sap 是作为进程外 com 组件,还是进程内 com 组件?
@Launcher: 进程外
@小肥羊同学: sap 进程外组件是 32 位的,还是 64 位?
@Launcher: 32位的
@小肥羊同学: 在 IIS 中,将应用程序池修改为 32 位。
@Launcher: 原来就是32位的。还是不行,也尝试修改64位,直接报错了。
@小肥羊同学: 你别病急乱投医,首先 32 位的 COM 组件只能由 32 位的进程调用,其次调用进程外 COM 组件的进程的权限必须同宿主进程外 COM 组件的进程的权限一致。
所以,第一步,你必须保证 SAP COM 是 32 位的,其次,IIS 的应用程序池必须以 32 位运行(你应该检查下是否修改正确了,比如改了别的应用程序池,不要怀疑不应该修改为 32 位);然后,你可以将应用程序池修改为 Classic 模式,还可以将应用程序池的标识修改为 LocalSystem 。
@小肥羊同学: 另外“if (conn.Logon(null, true)) 这个地方停下来”,停下来了,是什么意思?线程阻塞了?还是有异常抛出了?
@Launcher: 是线程被阻塞了 没有抛出异常
@小肥羊同学:
阻塞多久?
你部署的服务器同你开发时使用的同一台机器吗?
@Launcher: 不是同一台机器,但都是iis7。还有就是之前也遇到过这个问题是在iis6上的,标识为指定账户之后就可以正常用了。然后在iis7上,这样配置却不可以。
@小肥羊同学: 应用程序池模式修改为 Classic 了吗?
@小肥羊同学: 由于不是同一台机器,你先写个 Console 程序放在服务器上测试下 Logon 方法