2011-11-16 200 views
0

我們在我們的ASP.NET應用程序中使用ERPConnect,但有時當用戶嘗試通過我們的應用程序連接到SAP時,我們會收到一些錯誤消息。使用ERPConnect連接到SAP時出現隨機錯誤

CPIC-CALL:「CMRCV:RC = 19 LOCATION SAP-網關主機SERVERNAME/sapgw10 ERROR會話53230591未找到TIME星期三11月16 13時49分58秒2011 RELEASE 701 COMPONENT SAP-網關VERSION 2 RC 728 MODULE gwxxrd.c LINE 6278 COUNTER 1277701

當通過ERPConnect打開到SAP的連接時,總會發生這種情況。

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

這是非常隨機的。有些日子我們沒有收到任何錯誤信息,其他日子我們每天收到20封郵件。 ERPConnect使用System32文件夾中定義的librfc32.dll,並具有版本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(); 
     } 
    } 
} 
+0

請增加網關跟蹤級別(交易互通網關),等到發生了錯誤,並張貼相應的日誌條目。 – vwegert

+0

@vwegert:添加了錯誤日誌的摘錄。我不知道這是否足夠。在跟蹤文件中找到確切的錯誤並不容易。 – thomasvdb

+0

對不起,沒有什麼明顯的 - 我建議創建一個SAPnet消息,讓專家看看... – vwegert

回答

2

不幸的是,這是我在我的代碼中做的事情,這不是很... euh ...很好。 ERPConnect有一個R3Connection對象,我在整個應用程序中使用了一個單例。

如果用戶正在使用某個連接,同時另一個用戶也請求了連接,則R3Connection對象創建了一個新連接(可以使用SAP中的SM04事務進行驗證)。 如果兩個用戶都關閉了連接,兩個連接中的一個保持打開狀態(我認爲這是ERPConnect中的一個錯誤,但我們無法聯繫他們,因爲我們的支持現在已經過期)。 連接限制(在SAP中定義)在生產環境中快速達到。

我現在爲每個用戶創建一個R3Connection對象,因此我確信在我的代碼中調用Close()方法(或使用語句)時,連接在SAP系統中正確關閉。

代碼

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

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

      return connection; 
     } 
    } 
+0

你能告訴我你是如何爲每個連接做連接對象的嗎?我有類似的問題 – Nate

+0

@Nate我已經添加了一個代碼示例。我希望它能解決你的問題! – thomasvdb

+1

嘿謝謝。 Theobald對此作出了迴應,並稱這是librfcdll中的一個錯誤。這裏有一個新的版本:http://my.theobald-software.com/index.php?/ Knowledgebase/Article/View/54/9/useful-links – Nate

0

我四處狩獵的答案完全不同的問題,但看到我經歷了你迷迷糊糊的,這看起來很像網絡配置 - 確保您的SAP服務器「hercules」在Windows防火牆中打開了端口3210,3310和3610(我認爲這些端口是正確的 - 可能是3201/3301/3601,很難從SMGW日誌中發現),因此沒有任何其他防火牆阻止相關的流量,並且「hercules」上的默認網關被設置爲可以將流量成功路由到100.100.103.15的設備(我從您的日誌中假設這是您的服務器上的.NET應用程序的IP地址正在運行),並且100.100.103.15上的默認網關被設置爲可以成功的設備將流量路由到「hercules」。此外,如果您使用完全限定的域名(例如hercules.sap.local)與SAP服務器建立連接,那麼您會有更好的運氣,因爲那樣您就不再依賴NetBeOS的史前變幻莫測來找到您的SAP服務器。

+1

這是我的代碼中的一個問題。錯誤確實表明一個網絡問題,並在很長一段時間內也朝這個方向搜索...... – thomasvdb

相關問題