성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <div style='font-family: 맑은 고딕, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>.NET Service Bus 응용 사례: SocketShifter</div><br /> <br /> 처음 .NET ServiceBus를 알게 된 것이 다음의 MSDN Magazine 글 덕분이었습니다.<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;' > Foundations - Working With The .NET Service Bus ; <a target='_tab' href='https://docs.microsoft.com/en-us/archive/msdn-magazine/2009/april/working-with-the-net-service-bus'>https://docs.microsoft.com/en-us/archive/msdn-magazine/2009/april/working-with-the-net-service-bus</a> </pre> <br /> 글을 읽어보시면, 아주 매력적인 기능이 하나가 눈에 뜨일 텐데요. 설명보다는 글 안에 포함된 다음의 그림을 보시면 금방 이해가 되실 것입니다.<br /> <br /> [그림 1: Relay Service 구조]<br /> <img alt='netservicebus_sample_1.gif' src='/SysWebRes/bbs/netservicebus_sample_1.gif' /><br /> <br /> 와~~~! 멋지죠. 이 서비스는 다음의 HTTPort/HTTHost 서비스와 유사한 기능을 제공하고 있습니다.<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;' > TCP through HTTP tunneling: 기업내 Proxy 서버 제한에서 벗어나는 방법 ; <a target='_tab' href='/2/0/118'>http://www.sysnet.pe.kr/2/0/118</a> </pre> <br /> 즉, 이것을 잘 이용하면 사설망에서 서비스하고 있는 소켓 서비스를 마이크로소프트 측에서 제공하는 컴퓨터를 중계기로 하여 외부망으로부터 자유롭게 접속하는 것이 가능합니다.<br /> <br /> 그럼... 어떻게 활용해 보는 것이 좋을까요?<br /> 아래의 글에서는 이에 대한 ^^ 훌륭한 활용 예를 보여주고 있습니다.<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;' > .NET Service Bus - Remote Desktop over Firewalls! ; <a target='_tab' href='http://blogs.southworks.net/mwoloski/2009/07/10/net-service-bus-remote-desktop-over-firewalls/'>http://blogs.southworks.net/mwoloski/2009/07/10/net-service-bus-remote-desktop-over-firewalls/</a> </pre> <br /> 우와~~~! 이 말은 곧, 사설 IP를 받은 회사의 컴퓨터를 집에서도 VPN 없이 Remote Desktop 연결을 할 수 있다는 것입니다. 멋지지 않나요? ^^<br /> <br /> 아쉬운 점이 있다면, .NET Service Bus 서비스가 무료로 전세계 사람들에게 제공할 수는 없기 때문에 이 프로그램을 활용하기 위해서는 각자가 "Microsoft .NET Services"에 가입해서 Relay Service를 받기 위한 환경을 설정해 놓아야 한다는 것입니다.<br /> <br /> 그럼,,, 한번 설정 과정을 따라가 볼까요?<br /> <br /> <hr style='width: 50%' /><br /> <br /> 이전에도 말씀드렸듯이, 중계 서비스는 현재 주도적으로 무료(또는 유료)로 제공되는 곳이 없기 때문에 각자가 "Microsoft .NET Services"에 가입해서 자신만의 솔루션 구성을 해줘야 합니다.<br /> <br /> 이를 위해 다음의 URL을 방문하고,<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;' > Azure 서비스 등록 Azure Services Platform .NET Services ; http://www.microsoft.com/azure/netservices.mspx </pre> <br /> Live 로그인 후 등록 과정을 거칩니다.<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;' > Register for Azure Services ; <a target='_tab' href='http://go.microsoft.com/fwlink/?LinkID=129453'>http://go.microsoft.com/fwlink/?LinkID=129453</a> </pre> <br /> 그다음, Azure 서비스 중에서도 ".NET Services"로 로그인을 해서 들어갑니다.<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;' > .NET Services Microsoft .NET Services ; <a target='_tab' href='http://portal.ex.azure.microsoft.com/'>http://portal.ex.azure.microsoft.com/</a> </pre> <br /> "Add Solution" 메뉴를 이용해서 중계 서비스로 사용할 솔루션을 임의의 이름으로 하나 만듭니다. 저 같은 경우에는 "rdTicket"이라는 이름으로 만들었습니다. 솔루션을 만들면 곧바로 사용 가능하지 않습니다. 잠시 시간이 흐른 후, 새로 고침으로 방문을 하고 나서야 아래와 같이 "Status"가 "Active" 상태로 바뀝니다.<br /> <br /> [그림 2: rdTicket 솔루션 생성 화면]<br /> <img alt='netservicebus_sample_2.png' src='/SysWebRes/bbs/netservicebus_sample_2.png' /><br /> <br /> 이제, 우측 하단의 "Credentials" 링크를 누르고, 전환되는 화면에서 "Solution Password" 링크를 누르면 다음과 같이 솔루션의 접근 암호를 설정할 수 있는 화면이 나옵니다. 적절하게 입력하십시오.<br /> <br /> [그림 3: rdTicket 솔루션의 암호 설정]<br /> <img alt='netservicebus_sample_3.png' src='/SysWebRes/bbs/netservicebus_sample_3.png' /><br /> <br /> "솔루션 이름"과 "암호"는 다음 단계에서 사용하기 때문에 기억해 두십시오. <br /> <br /> <hr style='width: 50%' /><br /> <br /> 다음으로, 서버 측 환경을 구성해 봅니다.<br /> <br /> 원격 터미널 서비스를 제공하는 Windows Server 2008(또는 그 외의 터미널 서비스를 제공하는 윈도우즈) 서버에 다음의 SDK를 다운로드해 설치합니다.<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;' > Microsoft .NET Services SDK (July 2009 CTP) ; http://www.microsoft.com/downloads/details.aspx?FamilyID=38d8cf79-fc39-4aef-b3fd-ef280f2e9fa6&displaylang=en </pre> <br /> Codeplex 사이트에 방문해서 다음의 링크에서 SocketShifter 소스 코드를 다운로드 받습니다. (우측에 "Latest Version"의 "Download" 링크를 클릭하면 됩니다.)<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;' > SocketShifter - Source Code (이 글의 첨부 파일에도 올렸습니다.) ; <a target='_tab' href='http://socketshifter.codeplex.com/SourceControl/ListDownloadableCommits.aspx'>http://socketshifter.codeplex.com/SourceControl/ListDownloadableCommits.aspx</a> </pre> <br /> 다운로드한 소스를 Visual Studio에서 열어서, SocketShifterServer 프로젝트의 app.config을 열면 다음과 같은 내용이 있는데,<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;' > <?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <b style='color: Blue;'><add key="solutionName" value="[솔루션 이름]"/></b> <b style='color: Blue;'><add key="password" value="[솔루션 비밀번호]"/></b> <add key="servicePath" value="sb://<b style='color: Blue;'>[솔루션 이름]</b>.servicebus.windows.net/<b style='color: Blue;'>[임의의 이름]</b>"/> <add key="allow" value="localhost:3389"/> </appSettings> </configuration> </pre> <br /> 조금 전에 설정해 둔 .NET Services 솔루션 이름과 비밀번호를 입력하고, "servicePath"도 적절하게 변경시켜 줍니다. 저 같은 경우에는 솔루션 이름이 "rdTicket"이었기 때문에 servicePath를 다음과 같이 임의로 결정했습니다.<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;' > servicePath: sb://rdTicket.servicebus.windows.net/rd </pre> <br /> 이제 빌드를 하면 정상적으로 exe 파일이 나오는데 이를 NT 서비스로 등록하기 위해서 "Visual Studio 2008 명령행"을 실행하고 다음과 같이 InstallUtil을 이용해서 설치를 해줍니다.<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;' > C:\test\socketshifter-27275\SocketShifterServer\bin\Debug><b style='color: Blue;'>installutil SocketShifterServer.exe</b> Microsoft (R) .NET Framework Installation utility Version 2.0.50727.3053 Copyright (C) Microsoft Corporation. All rights reserved. 트랜잭트 설치를 실행하고 있습니다. 설치의 Install 단계를 시작하고 있습니다. C:\test\socketshifter-27275\SocketShifterServer\bin\Debug\SocketShifterServer.exe 어셈블리의 진행 상황을 보려면 로그 파일 내용을 검토하십시오. 파일은 C:\test\socketshifter-27275\SocketShifterServer\bin\Debug\SocketShifterServer.InstallLog 위치에 있습니다. 어셈블리 'C:\test\socketshifter-27275\SocketShifterServer\bin\Debug\SocketShifterServer.exe'을(를) 설치하고 있습니다. 영향을 받는 매개 변수: logtoconsole = assemblypath = C:\test\socketshifter-27275\SocketShifterServer\bin\Debug\SocketShifterServer.exe logfile = C:\test\socketshifter-27275\SocketShifterServer\bin\Debug\SocketShifterServer.InstallLog SocketShifterServerService 서비스를 설치하고 있습니다... SocketShifterServerService 서비스가 설치되었습니다. EventLog 소스 SocketShifterServerService을(를) 로그 Application에 만들고 있습니다... Install 단계는 완료되었으며 Commit 단계를 시작하고 있습니다. C:\test\socketshifter-27275\SocketShifterServer\bin\Debug\SocketShifterServer.exe 어셈블리의 진행 상황을 보려면 로그 파일 내용을 검토하십시오. 파일은 C:\test\socketshifter-27275\SocketShifterServer\bin\Debug\SocketShifterServer.InstallLog 위치에 있습니다. 어셈블리 'C:\test\socketshifter-27275\SocketShifterServer\bin\Debug\SocketShifterServer.exe'을(를) 커밋하고 있습니다. 영향을 받는 매개 변수: logtoconsole = assemblypath = C:\test\socketshifter-27275\SocketShifterServer\bin\Debug\SocketShifterServer.exe logfile = C:\test\socketshifter-27275\SocketShifterServer\bin\Debug\SocketShifterServer.InstallLog Commit 단계가 완료되었습니다. 트랜잭트 설치가 완료되었습니다. </pre> <br /> 이제 서비스 관리자를 열어서 정상적으로 서비스로 등록되었는지 확인합니다.<br /> <br /> [그림 4: Socket Shifter 서비스 등록 확인]<br /> <img alt='netservicebus_sample_4.png' src='/SysWebRes/bbs/netservicebus_sample_4.png' /><br /> <br /> 서비스가 현재 "Local Service" 계정으로 되어 있는데, Windows Vista/2008에서는 접근 거부 오류가 발생할 것입니다. "Local System" 계정으로 바꿔주거나 혹은 적절하게 권한 설정을 해주시면 되겠습니다.<br /> <br /> 서비스가 정상적으로 시작된 것을 확인하고 나서, 다음 클라이언트 작업으로 넘어갑니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> mstsc.exe를 실행해서 서버에 접근할 PC의 경우에는 설정이 다소 간단합니다. 역시 이 컴퓨터에도 .NET Services SDK를 설치하고,<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;' > Microsoft .NET Services SDK (July 2009 CTP) ; <a target='_tab' href='http://www.microsoft.com/downloads/details.aspx?FamilyID=38d8cf79-fc39-4aef-b3fd-ef280f2e9fa6&displaylang=en'>http://www.microsoft.com/downloads/details.aspx?FamilyID=38d8cf79-fc39-4aef-b3fd-ef280f2e9fa6&displaylang=en</a> </pre> <br /> 이전에 codeplex에서 다운로드 받은 Socket Shifter 솔루션에서 "SocketShifterClient" 프로젝트의 app.config을 상황에 맞게 편집해 줍니다.<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;' > <?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <b style='color: Blue;'><add key="solutionName" value="[솔루션 이름]"/></b> <b style='color: Blue;'><add key="servicePath" value="[서버에서 구성한 servicePath 주소]"/></b> <b style='color: Blue;'><add key="password" value="[솔루션 비밀번호]"/></b> <add key="localPort" value="1000"/> <add key="remoteHost" value="localhost"/> <add key="remotePort" value="3389"/> </appSettings> </configuration> </pre> <br /> 이제 빌드하고, 응용 프로그램을 로컬에 실행시켜 둡니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 사전 준비 작업은 위의 단계로 모두 완료되었습니다. 이제 mstsc.exe를 실행해서 실제로 원격 서버에 접속해 보는데요. 방법은, SocketShifterClient 응용 프로그램의 app.config에 등록한 localPort를 기준으로 주소를 다음과 같이 입력해 주면 됩니다.<br /> <br /> [그림 5: mstsc 실행]<br /> <img alt='netservicebus_sample_5.png' src='/SysWebRes/bbs/netservicebus_sample_5.png' /><br /> <br /> 그럼, mstsc.exe는 로컬에 실행된 SocketShifterClient.exe에 연결을 하고, SocketShifterClient.exe는 다시 app.config에 기록된 servicePath로 연결을 합니다. 그리곤 SocketShifterServer에게 remoteHost가 localhost이고, remotePort가 3389인 곳으로 접속을 시도하도록 합니다.<br /> <br /> 와~~~ 끝내주죠. ^^<br /> <br /> 이와 함께, ".NET Service Bus - Remote Desktop over Firewalls!" 글에서는 또 하나의 링크를 제공해 주고 있는데요.<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;' > .NET Services March 2009 CTP: Host a Public Website At The Kitchen Table or from a Coffee Shop! No Kidding. ; <a target='_tab' href='https://docs.microsoft.com/en-us/archive/blogs/clemensv/net-services-march-2009-ctp-host-a-public-website-at-the-kitchen-table-or-from-a-coffee-shop-no-kidding'>https://docs.microsoft.com/en-us/archive/blogs/clemensv/net-services-march-2009-ctp-host-a-public-website-at-the-kitchen-table-or-from-a-coffee-shop-no-kidding</a> </pre> <br /> 이런 응용 사례로... 뭐 또 다른 좋은 아이디어가 있지 않을까요? ^^<br /> <br /><br /><hr /><span style='color: Maroon'>[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
2073
(왼쪽의 숫자를 입력해야 합니다.)