Мое приложение отправляет много-много данных в SAP. Для этого он создает объект таблицы SAP и отправляет его. Я получаю эту ошибку несколько регулярно, но не надежно:SAP .NET Connector: исключение системы при маршалинге .NET.
System exception thrown while marshaling .NET type 20081219 to RFCTYPE_BCD
at SAP.Connector.Rfc.RfcMarshal.NetFieldToRfcField(Object src, RFCTYPE type, Encoding encoding, Byte[] dest, Int32 offset, Int32 len, Int32 charSize, Int32 decimals)
at SAP.Connector.Rfc.RfcStructureUtil.ToRfcStructure(Object obj, Byte[] dest, Type t, Encoding encoding, Boolean isUnicode, PropertyInfo[] propinfos, RfcStructInfo structInfo)
at SAP.Connector.Rfc.RfcStructureUtil.GetITabFromList(SAPConnection conn, Object list, Type t, RfcStructInfo structInfo, Int32 itab)
at SAP.Connector.Rfc.RfcClient.PrepareClientParameters(Type classType, MethodInfo m, Boolean isTQRfc, Object[] MethodParamsIn, RFC_PARAMETER[]& paramsIn, RFC_PARAMETER[]& paramsOut, RFC_TABLE[]& tables, ParameterMap[]& paramMaps)
at SAP.Connector.Rfc.RfcClient.RfcInvoke(SAPClient proxy, String method, Object[] methodParamsIn)
at SAP.Connector.SAPClient.SAPInvoke(String method, Object[] methodParamsIn)
Что странно, что этого не происходит каждый раз. Кроме того, тип .NET, на который он жалуется, «20081219» - это данные Я прохожу (дата) - не тип. Я думаю, что тип этого поля RFCTYPE.RFCTYPE_TIME
.
Любые предложения по устранению этой прерывистой ошибки? Есть ли какое-то состояние, которое я должен очищать между вызовами в SAP RFC?
Update:
В соответствии с просьбой, вот код, который вызывает SAP:
Using sapConnection As New MySapProxy(ConnectionString)
sapConnection.Connection.Open()
sapConnection.TheSapRfcICall(SapOpCode, Nothing, Nothing, sapTable, ResultTable)
End Using
Я думаю, может быть несколько потоков с использованием того же соединения, как некоторые. Использование SAP.Connector.GetNewConnection
ничего не изменило.
Update:
Кажется, эта проблема возникает даже тогда, когда я бегу один поток! В чем дело??
Есть ли способ отключить пул соединений, чтобы узнать, исправляет ли он это?
Update:
ответ @Igal Сербана, кажется, работает для меня. Завтра утром я проверю журналы и (надеюсь) награду за награду! Спасибо.
Update:
В соответствии с просьбой, моя версия librfc32.dll является 6403.3.78.4732.
Теперь, когда вы упомянули об этом, это имеет большой смысл. Я приложу приложение к одному потоку и посмотрю, исчезнет ли проблема. –
При запуске одного потока он исчезает. Теперь мне просто нужно выяснить, почему ... –
@Igal Serban: К счастью, это не решило проблему. Я думаю, что вы на правильном пути, хотя, похоже, это происходит в штырях, возможно, во время высокой нагрузки. –