Случайная ошибка при подключении к SAP с помощью ERPConnect - PullRequest
0 голосов
/ 16 ноября 2011

Мы используем ERPConnect в нашем приложении ASP.NET, но иногда мы получаем некоторые сообщения об ошибках, когда пользователи пытаются подключиться к SAP через наше приложение.

CPIC-CALL: 'CMRCV: rc = 19 LOCATIONSAP-шлюз на хосте SERVERNAME / sapgw10 ОШИБКА Разговор 53230591 не найден ВРЕМЯ СР 16 ноября 13:49:58 2011 РЕЛИЗ 701 КОМПОНЕНТ SAP-Gateway ВЕРСИЯ 2 RC 728 МОДУЛЬ gwxxrd.c СЧЕТЧИК ЛИНИИ 6278 1277701

Это всегда происходит при открытии соединения с SAP через ERPConnect.

R3Connection connection = Connection;
connection.Open(); // the error occurs here

Это довольно случайно.В некоторые дни мы не получаем никаких сообщений об ошибках, в другие дни мы получаем 20 сообщений в день.ERPConnect использует librfc32.dll, определенный в папке System32, и имеет версию 7200.1.39.6461 (последняя версия).

Эта проблема не возникала на моей локальной машине для разработки (Windows 7 x86).Это всегда происходит на нашем производственном сервере (Windows Server 2008 R2).

Есть идеи, что может вызвать эту проблему?

Редактировать (добавлено извлечение журнала ошибок):


*                                                                                                                               
*  LOCATION    SAP-Gateway on host HERCULES / sapgw10                                                                           
*  ERROR       partner 'hercules:sapgw01' not reached                                                                           
*                                                                                                                               
*  TIME        Thu Nov 24 09:10:20 2011                                                                                         
*  RELEASE     701                                                                                                              
*  COMPONENT   NI (network interface)                                                                                           
*  VERSION     38                                                                                                               
*  RC          -10                                                                                                              
*  MODULE      nixxi.cpp                                                                                                        
*  LINE        2835                                                                                                             
*  DETAIL      NiPConnect2                                                                                                      
*  SYSTEM CALL connect                                                                                                          
*  ERRNO       10061                                                                                                            
*  ERRNO TEXT  WSAECONNREFUSED: Connection refused                                                                              
*  COUNTER     1385122                                                                                                          
*                                                                                                                               
*****************************************************************************                                                   
GwTraceHdlInfo:                                                                                                                 

HANDLE   = 137                                                                                                                  
TIME     = Thu Nov 24 09:10:19 2011                                                                                             
SOCKET   = 2108                                                                                                                 
STAT     = NI_CONN_WAIT                                                                                                         
TYPE     = STREAM IPv4                                                                                                          
OUT      = 0 messages 0 bytes                                                                                                   
IN       = 0 messages 0 bytes                                                                                                   
LOCAL    = 0.0.0.0:1865                                                                                                         
REMOTE   = -                                                                                                                    
OPTIONS  = BUFFERED                                                                                                             
  ni hdl           = 137                                                                                                        
  type             = CLIENT                                                                                                     
  net_stat         = CONNECT_TO_REM_GW_PENDING                                                                                  
  hostaddr         = 100.100.103.15                                                                                             
  accept_hostaddr  = 100.100.103.15                                                                                             
  opcode           = NORMAL_CLIENT                                                                                              
  conn opcode      = REMOTE_GATEWAY                                                                                             
  conn vers        = 2                                                                                                          
  index            = 10                                                                                                         
  data             = 0000000000000000                                                                                           
  ext_info         = 000000000EF1D870                                                                                           
  offset           = 0                                                                                                          
  rest_len         = 0                                                                                                          
  snc_forced       = 0                                                                                                          
 remote gateway infos:                                                                                                          
  hostname =                                                                                                                    
  hostaddr = 100.100.103.15                                                                                                     
  service  = sapgw01                                                                                                            
  tpname   = sapdp01                                                                                                            

GwSelClear: clear RWC for hdl 137                                                                                               
NiICloseHandle: called for hdl 137 while waiting for connection                                                                 
NiICloseHandle: shutdown and close hdl 137 / sock 2108                                                                          
GwFreeHdlInfoMemory: free 000000000EF1D870 (ext info)                                                                           
GwIFreeMemForLU_TP: freed memory for sys 10                                                                                     
GwListRemove: remove elem 10 from sys_r3_list                                                                                   
GwListRemove: 2 elems in sys_r3_list                                                                                            
GwListRemove: elem 10 not in sys_reg_list                                                                                       
GwListRemove: remove elem 10 from sys_inuse_list                                                                                
GwListRemove: 104 elems in sys_inuse_list                                                                                       
GwUpdateClient: act_sys: 104                                                                                                    
GwIDelR3Conn: send error message to client                                                                                      
GwSendRc3: send (appc_rc=CM_PRODUCT_SPECIFIC_ERROR / sap_rc=GW_CONNECT_FAILED) to client HERCULES / sapgw10 (0)                 
GwRqDpSendTo: (HERCULES / sapgw10, gw_id=0, appc_ca_blk=-1, len=335, comm_index=-1)                                             
LOCK APPC ca_blk 3                                                                                                              
DpGetCpicCommIdx: found index 3 via appc_hdr                                                                                    
found comm entry 3 (tid/uid/mode/conv_id/a_r: 158/13268/0/        /0)                                                           
GwIsAWaitingSWP: wp 1 waiting                                                                                                   
GwSapWpWakeUp: send answer to sap wp 1                                                                                          
GwSapWpWakeUp: make wp 1 owner of appc_ca_blk 3                                                                                 
-OUT- tid         -1            uid  -1           mode  255                                                                     
-OUT- appc_ca_blk 3             len  335          rq_id 43133                                                                   
-OUT- wait_f_answ 0             cmd  0                                                                                          

NiIWrite: hdl 109 sent data (wrt=28,pac=1,MESG_IO)                                                                              
GwIDelR3Conn: decrement conv_no of client 0: 5                                                                                  
GwFreeMemory: free 000000000EEF3480 (len=3700)                                                                                  
GwFreeMemory: act_overflow_size = 20352 (- 3700)                                                                                
GwIDelR3Conn: idx/conv = ((-1/0) | (10/0)), delete conv 48 from conv-table                                                      
GwClearConn: conv_no/tcp_conv_no/sna_conv_no: 6/6/0                                                                             
GwClearConn: free r3 conv info                                                                                                  
GwClearConn: free buffer info                                                                                                   
GwFiSearchConvId: deleted 27077110 local, conn=48                                                                               
GwListInsert: insert elem 48 into conn_free_list (at begin)                                                                     
GwListInsert: 494 elems in conn_free_list                                                                                       
GwListRemove: remove elem 48 from conn_search_list                                                                              
GwListRemove: 0 elems in conn_search_list                                                                                       
GwListRemove: elem 48 not in conn_write_list                                                                                    
GwListRemove: remove elem 48 from conn_inuse_list                                                                               
GwListRemove: 6 elems in conn_inuse_list                                                                                        
GwReadReqIndex: (process_id: -1)                                                                                                
GwReadReqIndex: no filled request-index-block                                                                                   
GwCheckClient: check clients                                                                                                    
LOCK APPC ca_blk 4                                                                                                              
GwCheckClient: raise timeout for conv 27059938 (intr/uid/mode/comm_idx=9/13261/0/90)                                            
GwSendRcToDp: send appc_rc/sap_rc 10001/221 to dp                                                                               
make DISP owner of appc_ca_blk 4                                                                                                
DpSemRq: key: 3, units: 1, timeout: -1                                                                                          
DpSemRel: key: 3, units: 1                                                                                                      
DpRqPutIntoQueue: put request into queue (reqtype 0, prio LOW, rq_id 43134)                                                     
GwDispWakeUp: send wakeup with ni handle 2                                                                                      
NiIWrite: hdl 2 sent data (wrt=1,pac=1,MESG_IO)                                                                                 
-OUT- sender_id APPC_SERVER       tid  165   wp_ca_blk   -1      wp_id -1                                                       
-OUT- action    SEND_TO_WP        uid  13261   appc_ca_blk 4       type  NOWP                                                   
-OUT- new_stat  NO_CHANGE         mode 0     len         80      rq_id 43134                                                    
GwListRemove: remove elem 90 from comm_wait_list                                                                                
GwListRemove: 0 elems in comm_wait_list                                                                                         
GwListRemove: remove elem 90 from comm_wait_list                                                                                
GwListRemove: 0 elems in comm_wait_list 

Редактировать 2: добавлен пример кода

Я создал небольшой пример кода и, если заметил, что вконец одного соединения остается открытым.Если я начну пример снова, два соединения останутся открытыми в конце примера.Так что что-то идет не так ...

protected void SAP( object sender, EventArgs e ) {

    ThreadStart threadStart1 = new ThreadStart( CreateSAP );
    Thread thread = new Thread( threadStart1 );
    Thread thread2 = new Thread( threadStart1 );

    thread.Start();
    Thread.Sleep( 2000 );
    thread2.Start();

    while ( thread2.IsAlive ) {

    }

    Response.Write( "done" );
}

private void CreateSAP() {
    R3Connection conn = ERPConnection.Connection;
    conn.MultithreadingEnvironment = true;

    for ( int i = 0; i < 12; i++ ) {
        try {
            conn.Open();
            Thread.Sleep( 1000 );
        } finally {
            conn.Close();
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 26 января 2012

К сожалению, это было то, что я сделал в своем коде, что было не очень ... э-э ... хорошо.ERPConnect имеет объект R3Connection, и я использовал одноэлементное изображение во всем приложении.

Если пользователь использовал соединение, а другой пользователь также запросил соединение, объект R3Connection создал новое соединение (вы можетепроверьте это с помощью SM04-транзакции в SAP).Однако, если оба пользователя закрыли соединение, одно из двух соединений оставалось открытым (я думаю, что это ошибка в ERPConnect, но мы не можем связаться с ними, потому что срок нашей поддержки истек).Предел соединений (определенный в SAP) быстро достигается в производственной среде.

Теперь я создаю объект R3Connection для каждого пользователя, поэтому я уверен, что соединение в SAP-системе правильно закрытопри вызове метода Close () (или использования оператора) в моем коде.

Code

public static R3Connection Connection {
        get {
            ERPConnect.LIC.SetLic( "MyLicenseKey" );

            R3Connection connection = new R3Connection( 
                        [set connection settings]
                     );
            connection.MultithreadingEnvironment = true;

            return connection;
        }
    }
0 голосов
/ 17 января 2012

Я выискиваю ответ на совершенно другую проблему, но, учитывая, что я наткнулся на вашу, это очень похоже на конфигурацию сети - убедитесь, что ваш сервер SAP "геркулес" имеет порты 3210, 3310 и 3610 (я думаю, что они правы - это может быть 3201/3301/3601, трудно сказать по журналам SMGW), открытый в брандмауэре Windows, что нет никаких других брандмауэров, блокирующих соответствующий трафик, и что шлюз по умолчанию на «геркулесе» выберите устройство, которое может успешно перенаправить трафик на 100.100.103.15 (я предполагаю, из ваших журналов, что это IP-адрес вашего сервера, на котором работает приложение .NET), и что шлюз по умолчанию на 100.100.103.15 настроено на устройство, которое может успешно направлять трафик к "геркулесу". Кроме того, вам повезет больше, если вы используете полное доменное имя (например, hercules.sap.local) для подключения к своему серверу SAP, потому что тогда вы больше не будете полагаться на доисторические капризы NetBIOS для поиска своего Сервер SAP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...