这些天要做一个小项目——用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~~

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

于是我新建一个测试项目,用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!好了。