这些天要做一个小项目——用Windows服务调用SAP接口获取数据。网上百度之,确定了方案——用SAP .NET Connector 3.0来与SAP系统交互。用Win7 Ultimate,Visual Studio 2010 Ultimate——于是,我就想用.NET Framework 4.0——于是就有了后来的那个烦人的异常~~~(有时候用最新的东西风险还是不小的)。

  我是把与SAP接口交互的业务逻辑写在一个类库项目中,生成dll后供Windows服务调用。当我安装完服务后,看输出的跟踪日志,看到了异常信息——“SAP.Middleware.Connector.RfcDestinationManager”的类型初始值设定项引发异常。TAT~~

 

复制代码
 1 ///<summary>
2 /// 获取RFC连接目标
3 ///</summary>
4 private RfcDestination GetDestination()
5 {
6   try
7   {
8    var destinationName = "lgdderp";//SAP系统标识
9    IDestinationConfiguration destinationConfiguration = new SAPConfiguration();
10    RfcDestinationManager.RegisterDestinationConfiguration(destinationConfiguration);//这里就引发了那个讨厌的异常~
11    /*返回指定名称的目标对象。RfcDestinationManager会检查目标对象是否已经创建,如果未创建,则向配置对象请求必要的登录参数并创建目标对象。若配置对象未被应用程序注册,则会抛出异常。*/
12    RfcDestination rfcDestination = RfcDestinationManager.GetDestination(destinationName);//
13    RfcDestinationManager.UnregisterDestinationConfiguration(destinationConfiguration);
14    return rfcDestination;
15   }
16 catch (Exception ex)
17 {
18 Logger.Log("获取SAP连接目标时发生异常:" + ex.Message);
19 return null;
20 }
21}
复制代码

 

  于是我新建一个测试项目,用VS里面的测试项目(好像要安装Resharper 6.0哦~)来调用dll,嘿,居然能够运行正常,用Winform调用时却又引发了异常——头大啊!去调试,跑到上面所示代码的第10行,就出现异常了~~……后来,去看了异常里面的那个 InnerException的信息——“混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集”。OMG,灵感终于出现,也许是运行时版本兼容的问题。于是百度之——【http://blog.163.com/gz_ricky/blog/static/182049118201011104210827/】, 照着修改后,在Winform里面没问题了。可是!可是Windows服务里面还是报那个异常——虽然我也把服务项目里面的那个app.config文件修 改了!好吧,换FR版本——换成3.5吧~……终于改完,安装,查看输出日志——OK!好了。

 

 

http://www.cnblogs.com/redleaf-me/archive/2011/10/31/NET-invoke-SAP-Exception.html

posted on 2012-08-03 18:57  sunjun0427  阅读(708)  评论(1编辑  收藏  举报