기본 콘텐츠로 건너뛰기

글

WCF parameter와 return에 대해 알 수 없는 현상들...

이전 Post에서도 밝혔듯이 최근의 프로젝트는 WCF를 사용하고 있다. 프로젝트 Framework가 Spring.NET이다 보니 WCF의 설정 및 프로그램도 Spring.NET을 최대한 이용하고 있다. 그런 이유인지 모르겠지만, 약간 이상한 현상들이 나타나곤 한다. 최근에 발생한 문제는 Parameter로 받아서 해당 변수를 처리하여 그대로 리턴한 경우인데... 즉 간단히 함수를 보면. IList<someobject> SetChangeList(IList<someobject> paramList) { foreach(SomeObject item in paramList) { item.SomeValue = "value"; } return paramList; } 뭐 이런식의 형태라는 거다. 로컬 컴퓨터에서 해당 클래스의 해당 함수에 대한 모듈 단위테스트는 당연히 성공. 로컬 컴퓨터에서 WCF 메쏘드로 호출하는 단위 테스트도 성공. Commit 하고 테스트 서버에 배포!! 테스트 서버에서도 모듈의 단위테스트는 성공.. 그런데!! WCF 단위 테스트는 실패다. 그런데 정상적으로 무언가 판단할 수 있는 오류도 없다. WCF 로그에도 아무런 내용이 없다. 설상가상 해당 웹서비스는 재기동까지 되어있는 상황이더라는... 서버이벤트에 해당 웹서비스의 Pool이 중지되었다는 오류 메시지와 함께 웹서비스 시작 시 찍도록 한 로그들이 주루륵... 처음부터 위의 코드가 문제가 있다는 걸 안건 아니고, 이런저런 로그를 남기다 보니 저 부분에서 코드를 점프한다. 위 코드가 실행되는 블록은 분명 try, catch 되어있지만, catch 되지도 않는다. 이런저런 처리를 하다가 받은 리스트를 그대로 리턴하지 않도록 아래와 같은 수정을 해보게 됐다. 즉, IList<SomeObject> SetChangeList(IList<SomeO...

CruiseControl.NET 에서 Robocopy 사용시의 에러

최근 진행되는 프로젝트는 현재 CruiseControl.NET 을 이용하고 있다. 아직 Real Open 된 프로젝트가 아니어서, 현재는 테스트 서버에만 적용하고 있는 상황으로 CCNet.config 상의 시나리오는 아래와 같이 진행된다.(매우 간단하고 평번하다) 1. svn 에서 변경사항을 update 2. MSBuild 를 이용해서 솔루션 빌드 수행 3. IIS 정지 4. Robocopy 를 이용해서 변경된 파일을 deploy directory에 Copy 5. IIS 시작 매우 단순하고, 일반적인 CruiseControl.NET 의 시나리오인데... 항상 변경이 있으면 Robocopy 수행후에 에러가 발생한다. robocopy.exe {basedirectory} .\ {deploydirectory} /E /R:2 /XA:H /PURGE /XO /XD ".svn" /NDL /NC /NS /NP 60 0,1 뭐 대충 위와 같은 Configuration 이었는데, 위 내용은 ccnet 사이트에서도 나온 내용을 거의 그대로 사용한 것이라서.. 문제가 없을꺼라 생각했다. 에러때문에 항상 force integration 만 사용을 해 왔다.(사실 우린 스케쥴까지 쓸 필요는 없는 프로젝트다) force integration을 두번씩 하면 되니까 좀 불편하지만 사용을 했는데 오늘 갑자기 짜증이 확나서 이리저리 검색하고 결국 수정했다. 확인해보니 robocopy가 return 하는 exit code 중 0~16까지의 code 중 0~7은 오류는 아니다. ( Robocopy Exit Code ) 그래서 위의 설정을 간단히 아래와 같이 바꿨다는... robocopy.exe {basedirectory} .\ {deploydirectory} /E /R:2 /XA:H /PURGE /XO /XD ".svn" /NDL /NC /NS /NP 60...

Spring.NET, NUnit 사용시 Autowire 문제

Spring.NET과 NUnit 을 이용해서 테스트를 진행할 경우, 동일한 Interface를 상속받은 객체가 여러개인 경우가 있다. 이 경우 Test Class에 Get, Set 을 만들게 되는데... Spring.NET에서는 NUnit 테스트 클래스에 DI를 할 경우 기본적으로 Type에 따른 Autowire를 이용한다. 따라서, Spring.NET에서 어떤 객체를 Set 할지를 알 수 없다는 오류를 내게 된다. 이럴때는 Test Class에 Set을 없애고, Test를 Setup 해주는 함수에 application.getObject를 이용하여 Set을 해주면 해결된다.

WCF 에서 DataTable 을 사용할 때 Table Name 문제

요즘 회사에서 WCF 서비스와 WebOrb를 이용한 플렉스 프로젝트를 진행하고 있다. 이 외에도 C++로 만들어진 서버와는 gSoap으로 통신하는 부분도 있긴 하지만... 기본적으로 WebOrb아 통신하는 부분은 크게 꼭 Generic 타입을 사용해야 할 필요도 없고, 대부분의 데이터 역시 그리드에 표시할 내용들이라 DataTable 을 이용하고 있다. 기본적으로 Data는 POJO형태의 데이터를 iBatis 를 통해 맵핑되어 넘어온 IList<어쩌구> 를  DataTable로 Convert 해주는 함수를 만들어서 쓰고 있는 형태이다. POJO에 관계없이 DataTable로 만든 함수를 이용하다 보니 갑자기 Serialize 에러가 발생하더라는... 분명히 함수만 테스트를 했을때는 아무 문제가 없었는데..  결국, WCF 의 Trace 로그를 찍어보니 쳇... DataTable에 TableName이 없단다. 쩝~~ 결국 Convert 해주는 함수의 new DataTable() 했던 부분에  new DataTable(POJO타입네임) 형태로 바꿔줘서 해결했다는.. 쩝~~

블로그 이사 준비 중...

그동안 네이버 블로그를 사용했었다... 뭐 일년에 끽해야 10여개 글 올릴까 말까(여행기라도 올리지 않으면...) 하는 블로그지만.. 몇 개 안되는 포스트지만 이사 준비를 시작해야겠다. 다른 포스트는 괜찮은데 여행 포스트들은 옮기기가 쉽지 않은데... 뭐 아무튼... 요즘 너무 구글 서비스로 통합하는거 같아 뭔가 좀 찝찝하긴 하다..