RfcDestinationManager.UnregisterDestinationConfiguration时报错cannot unregister the given destination configuration
在使用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的更多相关文章
- 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看里面是否存在两个配置是的话删除一个重启服务 ...
- 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 ...
- RegSvr32注册OCX时报错
RegSvr32注册OCX时报错. 错误1: 模块“dsoframer2007.ocx”已加载,但对 DllRegisterServer 的调用失败,错误代码为 0x80070005. 有关此问题的详 ...
- ThinkPHP v3.2.3 数据库读写分离,开启事务时报错:There is no active transaction
如题:ThinkPHP v3.2.3 数据库读写分离,开启事务时报错: ERR: There is no active transaction 刚开始以为是数据表引擎不对造成的,因为 有几张表的引擎是 ...
- 远程连接mysql数据库时报错: 错误代码 2003不能连接到MySQL服务器在*.*.*.*(111)
在测试服务器上安装完mysql后, 服务器自己访问没有问题, 但是本地通过sql客户端连接时报错: 错误代码 2003不能连接到MySQL服务器在*.*.*.*(111).在网上查了一些资料,解决方案 ...
- 发布网站时报错:未能将文件xxx复制到xxx,问题处理
发布时报错提示: 错误 1 未能将文件 UpLoad\images\73CDC40ECCA44550BA8201D2AC187A46.jpg 复制到 obj\Debug\Package\Package ...
- 解决ThinkPHP关闭调试模式时报错的问题汇总
解决ThinkPHP关闭调试模式时报错的问题汇总 案例一: 最近用ThinkPHP开发一个项目,本地开发测试完成上传到服务器后,第一次打开正常,再刷新页面时就出现 "页面调试错误,无法找开页 ...
- SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存
SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存.这通常指示其它内存已损坏.(System.Data). 而登录本地数据库实例则能顺利登入,不存在上述问题. 试一试重置 ...
- iOS 上传新版本到AppStore时报错ITMS-90034
今天打包新版本上传到AppStore时报错 ERROR ITMS-90034:"Missing or invalid signature.The bundle'com.xxx.xxx' at ...
随机推荐
- Javascript之for循环该注意的问题
很多时候我们都用到for循环,而用到for循环部门往往对一个数组进行循环,其中我们很多时候都是这样写的: // 次佳的循环 for (var i = 0; i < myarray.length; ...
- 四 Scatter/Gather
scatter/gather用于描述从Channel中读取或者写入到Channel的操作. 分散(scatter):从Channel中读取在读操作中将读取的数据写入多个Buffer中.因此,Chann ...
- Eclipse使用快捷键总结
1.为方法添加注释:Alt + Shift + J
- When a java class is load by classloader, where the constant poll be put?
Q:When a java class is load by classloader, where the constant poll be put? A:the "Non-Heap Mem ...
- CSS单行、多行文本溢出显示省略号(……)解决方案
单行文本溢出显示省略号(-) text-overflow:ellipsis-----部分浏览器还需要加宽度width属性 .ellipsis{ overflow: hidden; text-overf ...
- Java全系列帮助文档下载
JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境.它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运 ...
- ArcGIS 10.3 for Server部署策略
注:以下部署策略整理自官方文档,主要是为方便以后查阅各种部署方案. 1.单机部署与反向代理 1.1.反向代理 反向代理可采用ArcGIS Web Adaptor或者第三方的反向代理服务器. 1.2.部 ...
- Springboot基础知识
1.@RestController注解 Spring4之后新加入的注解,@RestController是@ResponseBody和@Controller的组合注解.(返回json需要@Respons ...
- RoadFlowCore工作流2.8.1 更新日志
1.2.8.1更新了2.8刚发布的一些小BUG. 2.2.8.1增加了移动端,基于微信企业号或企业微信. 详细请参阅官方网站:roadflow.net
- 21_ConcurrentHashMap和ConcurrentSkipListMap
[简述] ConcurrentHashMap内部使用段(Segment)来表示这些不用的部分,每个段其实就是一个小的HashTable,他们有自己的锁,只要多个修改操作发生在不同的段上,他们就可以并发 ...