在使用NCO访问SAP的RFC时,我的程序代码是这么写的:

        string destinationName = "EWM_700_GROUP";
IDestinationConfiguration ID;
RfcDestination prd; public EWM01()
{
try
{
ID = new MyBackendConfig();
RfcDestinationManager.RegisterDestinationConfiguration(ID);
prd = RfcDestinationManager.GetDestination(destinationName);//获得目的对象
}
catch (Exception ex)
{
LogService.WatchLog("初始化EWM01异常:" + ex.Message.ToString() + Environment.NewLine);
throw ex;
//Configuration.OnlyOne().messageService.Error(ex, "EWM01");
}
} public void Dispose()
{
RfcDestinationManager.UnregisterDestinationConfiguration(ID); }

这段代码是写在一个WebService里,从表面上看,似乎没什么问题

然而,实际上,程序大多数时候都好使,但是每天都会有几次出现这种问题,如下图:

这句话的意思是,无法注销所给的目的配置,很容易就定位到,问题出在这一句

RfcDestinationManager.UnregisterDestinationConfiguration(ID);

但是,这一句不是用来断开连接的么??然后,我就开始查资料

关于这个问题的资料基本都是国外的,国内貌似还没人回答这个问题,好在我英文也不是很差,最后,让我找到了几个有用的信息

原文地址是:https://stackoverflow.com/questions/22242451/how-to-check-whether-the-sap-system-is-connected-to-net-or-not

这个国外哥们儿告诉我,NCO使用的是连接池机制,所以我们不必自己手动去创建连接和断开连接,NCO的运行库会帮我们做

在创建一个RFC的function实例的时候,就会触发连接,总之,我们不用去管打开或者关闭连接的事,我们只需要处理那些可能在连接过程中发生的异常就好了

还有一个哥们儿,也发表了类似的观点,不过他主要是跟我们讲注册那一步的意义

原文出处:https://archive.sap.com/discussions/message/14955463#14955463

有了这两个哥们的回答,我就大概可以确定了,所谓的RfcDestinationManager.RegisterDestinationConfiguration(ID);注册

只不过是告诉RfcDestinationManager管理器,SAP那边的地址配置信息而已,真正的建立连接和断开连接跟它没有关系

既然如此,那么这个问题的解决方案就很简单了,直接去掉RfcDestinationManager.UnregisterDestinationConfiguration(ID);这句就好了

另外,为了以防万一,最好在每次注册之前,做一个判断,以免重复注册引起报错

所以,最后,经过调整后代码就是

        public EWM01()
{
try
{
ID = new MyBackendConfig();
//如果RFC管理器中不存在指定的目的地
if (RfcDestinationManager.TryGetDestination(destinationName) == null)
{
//则向RFC管理器注册目的地配置
RfcDestinationManager.RegisterDestinationConfiguration(ID);
}
prd = RfcDestinationManager.GetDestination(destinationName);//获得目的对象
}
catch (Exception ex)
{
LogService.WatchLog("初始化EWM01异常:" + ex.Message.ToString() + Environment.NewLine);
throw ex;
//Configuration.OnlyOne().messageService.Error(ex, "EWM01");
}
} public void Dispose()
{
////如果RFC管理器中存在指定的目的地
//if (RfcDestinationManager.TryGetDestination(destinationName) != null)
//{
// //则注销RFC管理器的目的地配置
// RfcDestinationManager.UnregisterDestinationConfiguration(ID);
//}
}

希望能对遇到同样问题的人有帮助

本文为作者原创,如需转载,请标明出处

RfcDestinationManager.UnregisterDestinationConfiguration时报错cannot unregister the given destination configuration的更多相关文章

  1. myeclipse 项目运行时报错:运行项目时报错:Could not publish server configuration for Tomcat v6.0 Server at localhost. Multiple Contexts have a"/"

    1.先去E:\PLZT\workspace\.metadata\.plugins\org.eclipse.wst.server.core.sever.xml看里面是否存在两个配置是的话删除一个重启服务 ...

  2. MySQL 从 5.5 升级到 5.6,启动时报错 [ERROR] Plugin 'InnoDB' init function returned error

    MySQL 从 5.5 升级到 5.6,启动时报错: [ERROR] Plugin 'InnoDB' init function returned error. [ERROR] Plugin 'Inn ...

  3. RegSvr32注册OCX时报错

    RegSvr32注册OCX时报错. 错误1: 模块“dsoframer2007.ocx”已加载,但对 DllRegisterServer 的调用失败,错误代码为 0x80070005. 有关此问题的详 ...

  4. ThinkPHP v3.2.3 数据库读写分离,开启事务时报错:There is no active transaction

    如题:ThinkPHP v3.2.3 数据库读写分离,开启事务时报错: ERR: There is no active transaction 刚开始以为是数据表引擎不对造成的,因为 有几张表的引擎是 ...

  5. 远程连接mysql数据库时报错: 错误代码 2003不能连接到MySQL服务器在*.*.*.*(111)

    在测试服务器上安装完mysql后, 服务器自己访问没有问题, 但是本地通过sql客户端连接时报错: 错误代码 2003不能连接到MySQL服务器在*.*.*.*(111).在网上查了一些资料,解决方案 ...

  6. 发布网站时报错:未能将文件xxx复制到xxx,问题处理

    发布时报错提示: 错误 1 未能将文件 UpLoad\images\73CDC40ECCA44550BA8201D2AC187A46.jpg 复制到 obj\Debug\Package\Package ...

  7. 解决ThinkPHP关闭调试模式时报错的问题汇总

    解决ThinkPHP关闭调试模式时报错的问题汇总 案例一: 最近用ThinkPHP开发一个项目,本地开发测试完成上传到服务器后,第一次打开正常,再刷新页面时就出现 "页面调试错误,无法找开页 ...

  8. SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存

    SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存.这通常指示其它内存已损坏.(System.Data). 而登录本地数据库实例则能顺利登入,不存在上述问题. 试一试重置 ...

  9. iOS 上传新版本到AppStore时报错ITMS-90034

    今天打包新版本上传到AppStore时报错 ERROR ITMS-90034:"Missing or invalid signature.The bundle'com.xxx.xxx' at ...

随机推荐

  1. App Not Responsing

    参见原文:http://rayleeya.iteye.com/blog/1955657 inputDispatchingTimedOut contentProviderNotResponsing se ...

  2. tapable事件流插件

    tapable Webpack本质上是一种事件流的机制,它的工作流程就是将各个插件串联起来,而实现这一切的核心就是Tapable,webpack中最核心的负责编译的Compiler和负责创建bundl ...

  3. CentOS 7运维管理笔记(6)----Apache 基于 IP 的虚拟主机配置

    Apache 配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置.本篇随笔记录自己基于IP的虚拟主机配置. 如果同一台服务器有多个IP,可以使用基于IP的 ...

  4. 创建线程后马上CloseHandle(threadhandle)起什么作用

    原文:http://www.cnblogs.com/eddyshn/archive/2010/04/14/1711674.html HANDLE threadhandle = CreateThread ...

  5. 【Python】Sublime text 3 搭建Python IDE

    背景: 最经遇到一件很苦恼的事情,就是在Sublime text 3中写的Python代码直接挪到python原生的ide中老是报格式的错误(有时让人讨厌的缩进),没有办法,看到Sublime tex ...

  6. IIS6.0配置正常,但是显示“网页无法访问”,Httperr.log中显示全是“Connections_refused”,问题总结

    转自:http://blog.csdn.net/foxeatapple/article/details/21983869 最近部门的Web服务器突然无法访问! 加班解决! 问题症状: 1.“Inter ...

  7. select下拉框默认不能选择第一个选项的问题

    如题,现在有个js的功能:用户选择下拉框的同时,把选择的下拉框显示出来.同时选择的不能有重复的.刚开始 使用的是 select的onchange事件: $("#liveType") ...

  8. 记重回IT行业的面试

    问点: 0,梳理一个前端知识框架 1,jQuery的理解 2,仿某网站首页,除了download,显示新优化地方 3,文档模型(DOM) 事件流 事件处理程序 事件类型 例如阻止冒泡的方法 4,前端跟 ...

  9. 求n的元素的最大最小值

    public static int[] maxMin(int a[]) { int[] res = new int[2]; int len = a.length; if (len <= 0) { ...

  10. 【Leetcode】【Medium】Generate Parentheses

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...