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