효성CMS C#으로 개발하면서 발생하는 오류들.
제공받은것들...
64비트용 C:\xc30
32비트용 C:\xc30_32
샘플소스 SDSI_SAMPLE(C#)\csCmsTester <- 요것으로 연결 테스트.
dll XC3_ComLib.dll
----------------------------------------------------------------------------------------
dll 파일 참조..
----------------------------------------------------------------------------------------
XC3_ComLib.dll 파일을 참조로 사용.
----------------------------------------------------------------------------------------
레지스트리에 XC3_Com.dll 등록하기
----------------------------------------------------------------------------------------
TEST서버
32bit 에서 등록하기
C:\xc30_32\import\>regsvr32 XC3_Com.dll
----------------------------------------------------------------------------------------
REAL 서버
64bit 에서 등록하기
C:\Windows\SysWOW64>regsvr32.exe C:\xc30_32\import\XC3_Com.dll
----------------------------------------------------------------------------------------
암호화 처리가 안될때....
----------------------------------------------------------------------------------------
strSourceMsg = htStart["FULL_SYNTAX"].ToString(); // makeStartMsg("MEM", "A");
string strStartMsg = xc3.encrypt(strSourceMsg);
if (strStartMsg.Length == 0)
{
htRtn["rtnCode"] = "-1";
htRtn["rtnMsg"] = "시작전문 암호화 스트링 길이 0입니다. 확인하세요.";
return htRtn;
}
type[0] = MSGTYPE_CIPHER;
htRtn["sendMsg"] = "시작전문 : \r\n" + strSourceMsg;
byte[] byteStartMsg = strHexToByte(strStartMsg);
this.xmTokenWrite(byteStartMsg);
strStartMsg 암호화 결과값에 0 이면...
http://blog.naver.com/smin01?Redirect=Log&logNo=140098390546
Dbgview.exe 파일을 받아서 실행해보면
인증실패 라는 것을 확인할 수 있다.
C:\xc30_32\cert>dir
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: C00E-F9C8
C:\xc30_32\cert 디렉터리
2014-05-08 오후 02:52 <DIR> .
2014-05-08 오후 02:52 <DIR> ..
2010-05-11 오후 02:48 1,156 kmCert.der
2010-06-03 오후 05:28 676 kmPri.key
2014-05-14 오전 08:49 946 signCert.der
2010-02-08 오후 04:36 1,300 signPri.key
4개 파일 4,078 바이트
2개 디렉터리 2,275,409,920 바이트 남음
C:\xc30_32\cert>
인증서 파일을 최근것으로 갱신 하기.
----------------------------------------------------------------------------------------
XML 데이터를 읽는 동안 최대 문자열 콘텐츠 길이 할당량(8192)을 초과했습니다.
----------------------------------------------------------------------------------------
App.config / Web.config 설정추가하기.
----------------------------------------------------------------------------------------
REAL에 적용하였으나.... 실패........
----------------------------------------------------------------------------------------
뭐가 인식이 안되는걸까....???
System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: [CODE : -50000] General Error in processing execution context. Refer inner exception information.
ExecutionContext : Id=56116851, Type=HIMS.AR.DM.BIZ.HsFmsBiz, Method=RequestMember
(Fault Detail이 IncludeExceptionDetailInFaults=true에 의해 만들어졌을 가능성이 있는 ExceptionDetail의 값은 다음과 같습니다.
TheOne.Transactions.ExecutionProcessingException: [CODE : -50000] General Error in processing execution context. Refer inner exception information.
ExecutionContext : Id=56116851, Type=HIMS.AR.DM.BIZ.HsFmsBiz, Method=RequestMember
----> System.FormatException: 0에서 시작하는 인덱스는 0보다 크거나 같아야 하며 인수 목록의 크기보다 작아야 합니다.
위치: System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args)
위치: System.String.Format(IFormatProvider provider, String format, Object[] args)
위치: TheOne.Diagnostics.FileLogHelper.Write(String filePrefix, LogLevel level, String format, Object[] args)
위치: TheOne.Transactions.ComponentBase.WriteLog(LogLevel level, String format, Object[] args)
위치: TheOne.Transactions.ComponentBase.ExceptionHandler(Exception ex)
위치: HIMS.Transactions.HIMSBizBase.OnError(Exception ex) 파일 D:\Project\30. 개발\HIMS Core Projects\HIMS.Transactions\HIMSBizBase.cs:줄 31
위치: The...과(와) 같음).
private void handshake()
{
string strToken = xc3.keyInit();
type[0] = MSGTYPE_SESSION_KEY;
Console.WriteLine(strToken);
byte[] byteToken = strHexToByte(strToken);
this.xmTokenWrite(byteToken);
byte[] byteServerToken = this.xmTokenRead();
string strServerToken = BitConverter.ToString(byteServerToken).Replace("-", string.Empty).ToLower();
Console.WriteLine("ServerToken : " + strServerToken);
//byte[] finalRet = xc3.keyFinal(strServerToken, " ", 2);
object finalRet = xc3.keyFinal(strServerToken, " ", 2);
}
private byte[] strHexToByte(string data)
{
byte[] byteData = new byte[data.Length / 2];
int byteDataIdx = 0;
for (int i = 0; i < data.Length; i = i + 2)
{
String strHex = data[i].ToString() + data[i + 1].ToString();
byteData[byteDataIdx] = byte.Parse(strHex, System.Globalization.NumberStyles.HexNumber);
byteDataIdx++;
}
return byteData;
}
xc3 인식이 안되서....
아래의 방법으로 해결 !!
----------------------------------------------------------------------------------------
구성요소서비스 등록 - 64bit 운영서버에서 32bit DLL 사용하기
----------------------------------------------------------------------------------------
COM+ 폴더추가 하고 DLL등록시킨다.
----------------------------------------------------------------------------------------
구성요소서비스
COM+ 응용프로그램에 등록한 DLL이 서버 대기모드인 경우에는 인식이 안됨.
----------------------------------------------------------------------------------------
20140624 젠장 !!
NT 서비스로 응용 프로그램 실행
체크로 해결....
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------