如何克服异常“类型初始化器”SAP.Middleware.Connector.RfcConfigParameters“抛出异常 - 错误#: - 2146233036”

时间:2013-04-25 08:57:55

标签: c# sap-connector

我们的应用程序通过DCOM SAP连接器从SAP系统获取数据。最近我们用.NET连接器取代了。部署到生产后,它工作了一天。突然,它在访问一个RFC时发出指定的错误。

是异常消息
  

“SAP.Middleware.Connector.RfcConfigParameters”的Type Initializer引发了一个异常 - 错误#: - 2146233036。

我们使用的代码为SAP.Middleware.Connector.RfcConfigParameters创建对象并使用在下面

string Value1 ="Val1";
string Value1 ="Val2";
string Value1 ="Val3";
string Value1 ="Val4";
string Value1 ="Val5";
string Value1 ="Val6";
string Value1 ="Val7";

RfcConfigParameters parms = new RfcConfigParameters();

parms.Add(RfcConfigParameters.Param1, Value1);
parms.Add(RfcConfigParameters.Param2, Value2);
parms.Add(RfcConfigParameters.Param3, Value3);
parms.Add(RfcConfigParameters.Param4, Value4);
parms.Add(RfcConfigParameters.Param5, Value5);
parms.Add(RfcConfigParameters.Param6, Value6);
parms.Add(RfcConfigParameters.Param7, Value7);

SapRfcDestination = RfcDestinationManager.GetDestination(parms);
RfcCustomDestination customDest = SapRfcDestination.CreateCustomDestination();
IRfcFunction func = customDest.Repository.CreateFunction("RFC_FUNCTION");

func.SetValue("DATA1", "VAL1")
func.SetValue("DATA2", "VAL2")
func.SetValue("DATA3", "VAL3")

RfcStructureMetadata metaData = customDest.Repository.GetStructureMetadata("STRUCTURENAME");
IRfcTable rfcTable = func.GetTable("TABLENAME");

我们已经跟踪了异常信息,下面是异常信息

System.TypeInitializationException: The type initializer for '<Module>' threw an exception. ---> <CrtImplementationDetails>.ModuleLoadException: The C++ module failed to load.
 ---> System.IO.FileLoadException: Could not load file or assembly 'msvcm80, Version=8.0.50727.6195, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
File name: 'msvcm80, Version=8.0.50727.6195, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' ---> System.Runtime.InteropServices.COMException (0x8000FFFF): Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
   at <CrtImplementationDetails>.DoDllLanguageSupportValidation()
   at <CrtImplementationDetails>.LanguageSupport._Initialize(LanguageSupport* )
   at <CrtImplementationDetails>.LanguageSupport.Initialize(LanguageSupport* )


   --- End of inner exception stack trace ---
   at <CrtImplementationDetails>.ThrowModuleLoadException(String errorMessage, Exception innerException)
   at <CrtImplementationDetails>.ThrowModuleLoadException(String , Exception )
   at <CrtImplementationDetails>.LanguageSupport.Initialize(LanguageSupport* )
   at .cctor()
   --- End of inner exception stack trace ---
   at SAP.Middleware.Connector.RfcConfigParameters..cctor()- Stack trace:   at SAP.Middleware.Connector.RfcConfigParameters..ctor()

以下是我们的观察 它总是不会抛出问题。问题是间歇性地抛出 2.当我们去服务器机器并在那里运行应用程序时,它不会抛出错误。只有当应用程序从其他客户端机构访问时才会抛出错误 3.在开发,测试和舞台环境中,同样的问题是不可重现的。仅在生产中就是问题 4.如果我们重新部署特定的dll,它将在一天或半天内开始工作而没有任何错误,第二天就会抛出错误。

我的具体问题是 (1)如何克服“SAP.Middleware.Connector.RfcConfigParameters的类型初始化器”引发异常的错误 - 错误#: - 2146233036“?
(2)我们的主要可疑区域是内存泄漏。我们可以怀疑其他任何方面吗? (3)我们非常有限地无法访问生产环境。因此,我们试图在其他服务器中重现该问题,在这些服务器中我们拥有完全访问权限,例如dev和test。我们正在考虑多用户和多登录方案,以便在其他环境中重现该问题。我们可以考虑其他任何情况吗?

更新
我们设法在我们的一个测试服务器中重现该问题。并尝试下面的事情来解决问题。并安装了Visual C ++ 2005 Redistributable SP1,.NET connector 3.0和VB6.0。还有问题。我们无法找到问题的根本原因。

为了找到问题的根本原因,我还可以检查和做些什么?

根据回复进行编辑:
1.我们没有使用任何静态变量 2.我们已经安装了Visual C ++ 2005 Redistributable SP1.但它仍然无法解决问题。

2 个答案:

答案 0 :(得分:1)

This thread建议安装Visual C ++ 2005 Redistributable SP1软件包解决它。 (由于sapnco_utils.dll中的依赖性)

答案 1 :(得分:1)

经过大量分析和深入研究,我们找到了解决这个问题的方法。

我们正在使用SAP 3.0.4。当我们检查下面的3.0.9的最新SAP连接器发行说明时。

  

改进:destanation配置异常     未指定所需的配置参数时,例如SYSID,何时     试图通过负载平衡连接,抛出了一个非常低级别的异常,     它没有立即清楚,为什么连接不能     成立。现在,有早期检查,如果配置问题,     描述性的RfcConfigurationException正在详细说明     配置问题。

请参阅以下摘自SAP Connector 3.0.8

  

发行说明3.0.8   *修正:目的地配置     通过修改配置来更改目标的跟踪级别     目标对该目标的属性TraceLevel没有影响,     即使触发了配置更新事件。

因此,我们安装了最新的SAP连接器3.0.10,并使用最新的SAP连接器dll(sapnco.dll和sapnco_utils.dll)重建dll。随着这些最新的dll问题得到了解决。