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 ...
随机推荐
- Oracle Spatial GIS相关研究
1.Oracle Spatial 概念相关 Oracle Spatial 是Oracle 数据库强大的核心特性,包含了用于存储矢量数据类型.栅格数据类型和持续拓扑数据类型的原生数据类型.Oracle ...
- mysql-profiling详解
要想优化一条 Query,我们就需要清楚的知道这条 Query 的性能瓶颈到底在哪里,是消耗的 CPU计算太多,还是需要的的 IO 操作太多?要想能够清楚的了解这些信息,在 MySQL 5.0 和 M ...
- Java线程面试题 Top 50 (个人总结)(转)
问答总结: 1. JDK1.5引入了哪些更高阶的并发工具 2. Java中CyclicBarrier 和 CountDownLatch有什么不同? CountDownLatch和CyclicBar ...
- H5前端的关于像素解释
场景: 人物:前端实习生「阿树」与 切图工程师「玉凤」 事件:设计师出设计稿,前端实现页面 玉凤:树,设计稿发给你啦,差那么点像素,就叼死你┏(  ̄へ ̄)=☞ 阿树:~(>_<)~毛问题噶 ...
- sftp java 上传
1. 注意问题 uri的格式: sftp://zhangsan:123456@10.10.10.10:22 dir问题 : 判断有没有 没有创建 然后进入 类推 config问题: StrictHos ...
- HDU4652:Dice
题面 传送门 题意 \(m\)面的骰子 求连续出现\(n\)个相同面的期望次数 或者 求连续出现\(n\)个不同面的期望次数 Sol 设\(f[i]\)表示已经出现了\(i\)~\(n\)这些面相同的 ...
- 1004. 填充矩形 (Standard IO)
题目描述 已知矩形的大小为n×m,现用a×a的正方形填充该矩形.输入三个正整数n,m,a(n,m,a≤10^9),计算至多能填入多少正方形?(正方形可以正好碰到矩形边界,但不能超出矩形外) 输入 一行 ...
- ios的白屏坑
请参考http://www.fly63.com/article/detial/287
- Linux基础之命令练习Day7-nginx,nfs
一. Nginx Nginx("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗 ...
- maven升级遇到的疑惑
今天在解决一个问题的时候,由于需要修改maven的client包,按照之前的办法,修改完之后,没有修改版本号,而是直接修改client的代码,之后直接 mvn deploy -e 打包上去了,然后奇怪 ...