SAP Connector 要使用時要進行初始:
// 1.初始 SAP 連接介面 RfcDestinationManager.RegisterDestinationConfiguration(new MyBackendConfig());
這個方法在單執行緒中沒有太大的問題,但是搬到 ASP.NET (web)的世界中就麻煩了,
原因是因為這個方法 RegisterDestinationConfiguration 是靜態方法,
在多執行緒的世界中,程式一不小心就會造成執行階段報錯:Destination configuration already initialized
所以要透過 UnregisterDestinationConfiguration 來進行關閉,
但是要呼叫之前一定要確認傳進去的組態參數是同一個,透過此下的程式碼就可以"沒效率"的解決此問題。
為何說沒效率呢?因為每次呼叫RFC 時,都要 Init & Uninit,浪費資源也浪費時間,
但是目前可能這是唯一的解法,若之後有更好的解決方法再另外補充。
public class HuLane { RfcDestination m_rfcDest = null; RfcRepository m_rfcRepo = null; HLBackendConfig m_Config = null; public bool InitSAP() { bool bRet = false; try { m_Config = new HLBackendConfig(); RfcDestinationManager.RegisterDestinationConfiguration(m_Config); m_rfcDest = RfcDestinationManager.GetDestination("JTC_000"); m_rfcRepo = m_rfcDest.Repository; bRet = true; } catch (Exception ex) { System.Diagnostics.Trace.WriteLine( String.Format("InitSAP(): {0}", ex.Message)); } return bRet; } public bool UninitSAP() { bool bRet = false; try { RfcDestinationManager.UnregisterDestinationConfiguration(m_Config); bRet = true; } catch (Exception ex) { System.Diagnostics.Trace.WriteLine( String.Format("UninitSAP(): {0}", ex.Message)); } return bRet; } }
參考資料來源連結
3 則留言:
大大你好,我用你的方式試過後,還是出現'SAP.Middleware.Connector.RfcDestinationManager' 的型別初始設定式發生例外狀況,是否哪邊沒設好
RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.AppServerHost, "10.1.2.156");
parms.Add(RfcConfigParameters.SystemNumber, "00");
parms.Add(RfcConfigParameters.User, "E_HR");
parms.Add(RfcConfigParameters.Password, "201008");
parms.Add(RfcConfigParameters.Client, "100");
parms.Add(RfcConfigParameters.Language, "EN");
parms.Add(RfcConfigParameters.MaxPoolSize, "10");
parms.Add(RfcConfigParameters.IdleTimeout, "5");
以上為我的參數
文章已經更新,請再參考看看吧
張貼留言