성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <br /> <div style='font-family: 맑은 고딕, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>시스템 시간 변경 후 Session이 맺어진 WCF 클라이언트의 예외 발생</div><br /> <br /> 고객사 측에서 재미있는 테스트 결과를 문의해왔습니다.<br /> <br /> <SPAN style='BACKGROUND-COLOR: #ccffcc; FONT-STYLE: italic; MARGIN: 10px 0px 10px 10px; WIDTH: 800px; FONT-FAMILY: 맑은 고딕, Consolas, Verdana; COLOR: #005555'><br /> "<br /> 같은 PC에서 호스팅되고 있는 InstanceContextMode.PerSession 유형의 WCF 서버와 클라이언트가 있는데, 컴퓨터의 시간을 바꾸기만 하면 예외가 발생한다.<br /> "</span><br /><br /> <br /> 라는 것입니다.<br /> <br /> 아쉽지만, 결론부터 말하자면 위의 현상에 대한 해답은 찾지 못했습니다. 사실 제 입장에서 더 이상 건드려볼 수 있는 옵션이 별다르게 없었기 때문에 문제를 재현하는 간단한 소스를 작성하는 수준에서 그만 둘 수밖에 없었습니다.<br /> <br /> 혹시나, 자신이 이 문제는 꼭 풀어보겠다 싶은 분들은<a target='_tab' href='http://www.sysnet.pe.kr/bbs/DownloadAttachment.aspx?wid=778&boardid=331301885'> 첨부한 프로젝트</a>를 이용해서 재현할 수 있습니다. ^^<br /> <br /> <ol> <li><a target='_tab' href='http://www.sysnet.pe.kr/bbs/DownloadAttachment.aspx?wid=778&boardid=331301885'>파일을 다운로드</a>해 압축을 풀고, "WcfServer.sln" 파일을 Visual Studio에서 연다. (UAC가 켜진 경우에는, "Run as administrator"로 실행한다.)</li> <li>"F5" 키를 눌러 프로젝트를 디버깅한다. 콘솔 유형의 서버와 클라이언트가 실행되고 클라이언트 측의 콘솔은 잠시 "예외"가 발생한다.</li> </ol> (* 가끔씩 처음 한 번은 제대로 실행되는 경우가 있는데, 다시 반복하면 예외가 발생합니다.)<br /> <br /> 나름대로, 문제를 파악하는 중에 재미있는 규칙을 하나 발견했습니다. 무조건 "시간 변경"을 하는 것으로 오류가 발생하지는 않고, 클라이언트 측의 app.config에 설정된 "binding.sendTimeout" 속성의 값보다 크게 시간을 변경한 경우에만 예외가 발생했습니다.<br /> <br /> 그러니까, 예를 들어 WCF 클라이언트 측의 binding.sendTimeout이 다음과 같을 때,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > <binding name="IService1_TcpBinding" closeTimeout="00:00:03" openTimeout="00:00:05" receiveTimeout="01:00:00" <b style='COLOR: blue'>sendTimeout="00:00:15"</b>> </pre> <br /> 15초로 설정되어 있으므로, 아래와 같이 15초 이후의 값으로 지정하고 실행하면 상황에 따라 System.TimeoutException 또는 System.ServiceModel.CommunicationException 예외가 발생합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > using (ServiceReference1.Service1Client clnt = new WcfClient.ServiceReference1.Service1Client()) { clnt.StarDust(); DateTime added = <b style='COLOR: blue'>DateTime.Now.AddSeconds(15)</b>; // 15초 후로 시간 설정 SetSystemTime(added.ToUniversalTime()); clnt.StarDust(); // 여기서 System.TimeoutException 예외 발생 clnt.Close(); // 위의 clnt.StarDust 호출이 없어도, // Close 단계에서도 System.ServiceModel.CommunicationException 예외 발생 } </pre> <br /> 반면, 위의 AddSeconds 호출에 14(안전하게 13 이하) 값을 주면 예외가 발생하지 않습니다. 만약 <a target='_tab' href='/2/0/768'>위의 통신이 '보안' 설정이 된 경우라면 그나마 이해해주겠지</a>만 그렇지 않은 경우라서 어떻게 풀어내야 할지 난감할 따름입니다.<br /> <br /> 이런 때는 <a target='_tab' href='http://connect.microsoft.com/'>Connect 사이트</a>에 문의하는 것이 좋을까요? 아님, MVP 자격으로 받은 "<a target='_tab' href='http://support.microsoft.com/default.aspx?scid=fh;KO;Profsupp'>Professional Support</a>"를 써먹어 보는 것이 좋을까요? ^^<br /> <br /> <br /> <br /><br /><hr /><span style='color: Maroon'>[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
5457
(왼쪽의 숫자를 입력해야 합니다.)