Component ·Î ±¸ÇöÇÏ´Â °Í ¿Ü¿¡µµ CGI ³ª ISAPI µîÀ» °í·ÁÇØ º¼ ¼öµµ Àִµ¥, ÀÌ ¹æ¹ýÀÇ ´ÜÁ¡Àº ·¹À̾ƿôÀ» º¯°æÇÏ°íÀÚ ÇÒ ¶§´Â ÇÁ·Î±×·¥À» ÀçÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù´Â µ¥ ÀÖ´Ù. ÇÁ·Î±×·¥ º»¿¬ÀÇ ±â´ÉÀÎ Business Logic Àº Component ·Î °³¹ßÇÏ°í »ç¿ëÀÚ¿¡°Ô º¸¿©Áö´Â ·¹À̾ƿô, Áï HTML Äڵ带 ¸¸µå´Â °ÍÀº ASP ¿¡¼ ½ºÅ©¸³Æ® ¾ð¾î·Î ÀÛ¼ºÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.
ÀÌ ±Û¿¡¼´Â ÀÌ°°Àº Component ¸¦ ÀÛ¼ºÇϴµ¥ ÀÖ¾î¼ °¡Àå ¼Õ½¬¿î ¹æ¹ýÀ¸·Î Visual Studio ÀÇ ATL À» ²Å¾Ò´Ù. ¶ÇÇÑ, CSocket À̳ª CArchive ¿Í °°Àº Æí¸®ÇÑ Å¬·¡½º µéÀ» Á¦°øÇÏ´Â MFC ¸¦ ÇÔ²² »ç¿ëÇϵµ·Ï ÇÑ´Ù. ÇÊÀÚ´Â MFC ¿Í ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÑ CRegExp ¶ó´Â Regular Expression ¶óÀ̺귯¸®¸¦ Áñ°Ü »ç¿ëÇϹǷΠÀÌ·± ¹æ¹ýÀ» ´õ¿í ¼±È£ÇÏ°Ô µÇ¾ú´Ù.
ActiveX Server Component ´Â µð¹ö±ëÀ» ÇϱⰡ ¸Å¿ì ¾î·Æ´Ù. ¿Ö³ÄÇÏ¸é »õ·Î ÇÁ·Î±×·¥À» ºôµåÇÏ°í ³ª¸é ¸ÕÀú »ç¿ëÇÏ´ø ÆÄÀÏ¿¡ µ¤¾î¾²±â¸¦ ÇØ¾ß Çϴµ¥, IIS °¡ ±× ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÁßÀ̱⠶§¹®¿¡ ÆÄÀÏÀ» »èÁ¦Çϰųª µ¤¾î¾²±â ÇÏ´Â °ÍÀÌ ºÒ°¡´ÉÇÏ´Ù. µû¶ó¼ Web Service ¸¦ Áß´ÜÇÑ ´ÙÀ½ µ¤¾î¾²±â¸¦ ÇÏ°í, ±×¸®°í ´Ù½Ã ¼ºñ½º¸¦ ½ÃÀÛÇØ¾ß ÇÑ´Ù. °£´ÜÇÑ Exe ÇÁ·Î±×·¥À» ¸¸µé ¶§´Â ÄÄÇ»Å͸¸ ÁÁ´Ù¸é »ó¼ö Çϳª ¹Ù²Ù°í ºôµåÇؼ Å×½ºÆ®ÇÏ°í ÇÏ´Â °ÍÀÌ ÃëÇâ´ë·Î °¡´ÉÇÏÁö¸¸, ÇÁ·Î±×·¥À» Á¶±Ý ¹Ù²å´Ù°í Çؼ ¼ºñ½º¸¦ Áß´ÜÇß´Ù°¡ ´Ù½Ã ½ÇÇà½ÃÅ°´Â °ÍÀº ²Ï ±ÍÂúÀº ÀÛ¾÷ÀÌ´Ù.
µû¶ó¼ ÀÌ ±Û¿¡¼ ´Ù·ê ¹æ¹ýÀº ¿ø·¡ÀÇ ·ÎÁ÷À» ´ãÀº ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé°í, ±×°ÍÀÇ Wrapper ·Î µÎ °¡Áö¸¦ µÎ´Â °ÍÀÌ´Ù. Çϳª´Â ¿ø·¡ ¸¸µé·Á°í ÇÏ´Â ActiveX Server Component DLL ÀÌ°í, ¶Ç Çϳª´Â µð¹ö±ëÀ» À§ÇÑ Å×½ºÆ® ÇÁ·Î±×·¥ÀÌ´Ù. Å×½ºÆ® ÇÁ·Î±×·¥À» ÅëÇؼ ÃæºÐÈ÷ °ËÁõÀ» ÇÑ ´ÙÀ½ µ¿ÀÛÀÌ ¸¶À½¿¡ µé¸é ±×¶§ °¡¼ DLL À» ºôµåÇؼ µ¤¾î¾²¸é ºñ±³Àû ¼ö¿ùÇÏ°Ô µð¹ö±ëÀ» ÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
¹°·Ð ´Ù¸¥ ¹æ¹ýÀ¸·Î µð¹ö±ëÇÒ ¼öµµ ÀÖ´Ù. Component ¸¦ ¸¸µé ¶§ Server Component ·Î¼¸¸ µ¿ÀÛÇϵµ·Ï ¸¸µéÁö ¾Ê°í 'Full Control' µîÀ¸·Î ¸¸µç ´ÙÀ½ Visual Basic ¿¡¼ È£ÃâÇÏ¿© Trace µîÀ¸·Î µð¹ö±ëÀ» ÇÏ´Â ¹æ¹ýµµ º¸¾Ò´Ù. ¿©±â¼´Â Web Page ¿¡¼¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Â °¡º¿î DLL ·Î ¸¸µéµµ·Ï ÇÑ´Ù.
¸ÕÀú Visual Studio ÀÇ File|New...|[Workspace] ¸Þ´º¸¦ »ç¿ëÇÏ¿© Workspace ¸¦ ¸¸µç´Ù. À̸§Àº ÆíÀÇ»ó AxSComp ·Î ÇÑ´Ù. ±× ´ÙÀ½ Workspace window ÀÇ Workspace 'AxSComp': 0 project(s) ¶ó°í ³ª¿Â ºÎºÐ¿¡ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öÆ°À» ´©¸£°í Add New Project to workspace... ¸¦ ¼±ÅÃÇÑ´Ù. ÇÁ·ÎÁ§Æ® Á¾·ù´Â ¸Ç ¾Æ·¡¿¡ ÀÖ´Â Win32 Static Library ·Î ÇÏ°í À̸§Àº Comp ·Î ÇÏÀÚ. MFC ¸¦ »ç¿ëÇÒ °ÍÀ̹ǷΠMFC »ç¿ë¿¡ üũ¸¦ ÇÑ´Ù. ºü¸¥ ºôµå¸¦ À§ÇØ Precompiled Header µµ üũÇÑ´Ù. ¹°·Ð Çϵåµð½ºÅ©°¡ ºÎÁ·ÇÏ´Ù¸é ¾È Çصµ µÈ´Ù.
Workspace window ¸¦ ClassView ·Î ÀüȯÇÏ°í Comp classes ¿¡ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öÆ°À» ´·¯ New Class... ¸¦ ¼±ÅÃÇÏÀÚ. Ŭ·¡½º À̸§Àº CServerDetector ·Î ÇÑ´Ù. ÀÌ Å¬·¡½º°¡ ¾ÕÀ¸·Î ASP ¿¡¼ ºÒ·¯ »ç¿ëÇÒ Å¬·¡½º°¡ µÇ¹Ç·Î ÀÌ°ÍÀ» Àß µðÀÚÀÎÇϵµ·Ï ÇÑ´Ù. ¸â¹ö¿Í »ó¼ö¸¦ ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÑ´Ù.
ServerDetector.h Áß¿¡¼ |
1: class CServerDetector 2: { 3: public: 4: int Detect(); 5: CServerDetector(); 6: virtual ~CServerDetector(); 7: 8: CString m_strServer; 9: int m_nPort; 10: 11: CString m_strWebServer; 12: 13: enum _error { 14: OK, SOCKET_NOT_CREATED, SERVER_UNKNOWN, 15: NOT_RESPONDING, UNRECOGNIZED, UNKNOWN 16: }; 17: }; |
ServerDetector.cpp Áß¿¡¼ |
1: int CServerDetector::Detect() 2: { 3: CSocket sock; 4: BOOL bRet; 5: bRet = sock.Create(); 6: if (!bRet) { 7: return SOCKET_NOT_CREATED; 8: } 9: bRet = sock.Connect(m_strServer, m_nPort); 10: if (!bRet) { 11: DWORD nError = GetLastError(); 12: switch (nError) { 13: case WSAEINVAL: 14: return SERVER_UNKNOWN; 15: case WSAETIMEDOUT: 16: return NOT_RESPONDING; 17: default: 18: return UNKNOWN; 19: } 20: } 21: 22: CString strReq(_T("HEAD / HTTP/1.0\n\n")); 23: sock.Send((LPVOID)(LPCTSTR)strReq, strReq.GetLength()); 24: // ¿¡·¯ üũ´Â »ý·«ÇÑ´Ù. 25: // À§¿¡ Connect ½ÇÆÐ¿Í °°Àº ¿ä·ÉÀ¸·Î ¿¡·¯ Äڵ带 ¸®ÅÏÇÑ´Ù. 26: 27: m_strWebServer = _T(""); 28: 29: CSocketFile sf(&sock); 30: CArchive ar(&sf, CArchive::load); 31: 32: CString str; 33: try { 34: while (ar.ReadString(str)) { 35: if (str.Left(8).Compare(_T("Server: ")) == 0) { 36: m_strWebServer = str.Mid(9); 37: } 38: } 39: } catch (CArchiveException e) { 40: // EOF ÀÏ ¶§ Exception ÀÌ ¹ß»ýÇϹǷΠcatch ÇÑ´Ù. 41: // Error üũ´Â »ý·«ÇÑ´Ù. 42: } 43: 44: if (m_strWebServer.GetLength() == 0) { 45: return UNRECOGNIZED; 46: } 47: return OK; 48: } |
»ý¼ºÀÚ¿¡¼ m_nPort ´Â 80À» ±âº» °ªÀ¸·Î °¡Áöµµ·Ï ÇÏ°í, MFC Socket À» »ç¿ëÇϹǷΠstdafx.h ¿¡ #include <afxsock.h> ¸¦ ³Ö´Â °ÍÀ» ÀØÁö ¾Êµµ·Ï ÇÑ´Ù.
´ÙÀ̾ó·Î±×´Â ´ÙÀ½°ú °°Àº ¸ð¾çÀÌ µÇµµ·Ï ¼öÁ¤ÇÑ´Ù. ¼¼ °³ÀÇ ¿¡µðÆ® ÄÁÆ®·ÑÀ» °¢°¢ CString m_strServer, int m_nPort, CEdit m_out ÀÇ À̸§À» ºÎ¿©Çß´Ù. µÎ ¹öÆ°Àº OK ¿Í Cancel ÀÇ Caption ¸¸ ¼öÁ¤ÇÑ °ÍÀÌ´Ù.
CAxMFCTestDLG::OnOK() ¸¦ ´ÙÀ½°ú °°ÀÌ Override ÇÑ´Ù.
AxMFCTestDlg.cpp Áß¿¡¼ |
void CAxMFCTestDlg::OnOK() { CWaitCursor cursor; UpdateData(); CServerDetector *psd = new CServerDetector(); psd->m_strServer = m_strServer; psd->m_nPort = m_nPort; psd->Detect(); CString strWebServer = psd->m_strWebServer; m_out.SetWindowText(strWebServer); delete psd; //CDialog::OnOK(); } |
ServerDetector.h ¸¦ include ÇÏ°í À̸¦ À§ÇØ ´ÙÀ½ ¼¼ÆÃÀ» ÇÑ´Ù.
Project -> Project Settings -> Settings For: All Configuration, -> AxMFCTest -> C/C++ ÅÇ -> Preprocessor -> Additional include directories: ..\Comp -> Comp -> General ÅÇ -> Microsoft Foundation Classes: Use MFC in a Static Library -> Dependencies... -> Select project: AxMFCTest -> Dependent on: Comp (check)¶ÇÇÑ, CAxMFCTestDlg::CAxMFCTestDlg() ÀÇ AFX_DATA_INIT ¿¡¼ m_nPort ´Â 80 À» ÃʱⰪÀ¸·Î °¡Áöµµ·Ï ÇÑ´Ù.
ÀÌÁ¦ ¿øÇÏ´Â ÇÁ·Î±×·¥ÀÌ ¿Ï¼ºµÇ¾ú´Ù :)
ÀÚ.. ´Ù½Ã Workspace ÀÇ FileView ¿¡¼ Workspace ¿¡ »õ·Î¿î ÇÁ·ÎÁ§Æ®¸¦ Ãß°¡ÇÏÀÚ. Project ÀÇ Á¾·ù´Â ATL COM AppWizard ÀÌ°í À̸§Àº WebServerDetector ¶ó°í ÇØ º¸ÀÚ. ³ªÁß¿¡ ASP ¾È¿¡¼ Server.CreateObject("Appname.Classname") À» È£ÃâÇÒ ¶§ Appname ÀÌ µÇ´Â ºÎºÐÀÇ À̸§ÀÌ´Ù. ´ÙÀ½ ÆäÀÌÁö¿¡¼´Â DLL À» ¼±ÅÃÇÏ°í Support MFC ¸¦ üũÇÑ´Ù.
ÄÄÆ÷³ÍÆ®°¡ µÇ±â À§ÇÑ ±âº»ÀûÀÎ ÆÄÀϵéÀÌ »ý¼ºµÇ¾ú´Ù. ÇÁ·ÎÁ§Æ®°¡ ¸¸µé¾îÁø ´ÙÀ½ Project | Dependencies... ¸Þ´º¿¡¼ Comp ¿¡ ÀÇÁ¸Çϵµ·Ï ¼³Á¤ÇÏ°í ³ª¸é, ÀÌÁ¦ ¾Æ±îÀÇ Classname ¿¡ ÇØ´çÇÏ´Â °ÍÀ» ¸¸µé Â÷·ÊÀÌ´Ù.
Workspace window ¸¦ ClassView ·Î ¹Ù²Ù°í ¹æ±Ý »ý¼ºµÈ WebServerDetector classes ¿¡ ¿À¸¥ÂÊ ¹öÆ°À» ´·¯ New ATL Object... ¸¦ ¼±ÅÃÇÑ´Ù. Category ´Â Objects, Objects ´Â ActiveX Server Component ¸¦ ¼±ÅÃÇÑ´Ù.
´ÙÀ½ ´Ü°è¿¡¼ Short Name: ¿¡ Detector ¶ó°í ÀÔ·ÂÇØ º¸ÀÚ. CDetector, IDetector µîµîÀÇ À̸§µé°ú ÆÄÀϵéÀÌ ÀÚµ¿À¸·Î »ý¼ºµÇ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. ´ÙÀ½À¸·Î ³Ñ¾î°¡±â Àü¿¡ ASP ÅÇ¿¡ µé¾î°¡ º¸¸é ÇÊ¿äÇÑ Object ¸¦ üũÇÏ´Â ºÎºÐÀÌ ³ª¿Â´Ù. ÇÊ¿äÇÏ¸é »ç¿ëÇϴµ¥, Áö±ÝÀº ¸ðµÎ ²ôÀÚ. OnStartPage/OnEndPage ´Â üũÀÎ »óÅ·ΠµÐ´Ù.
¸ÕÀú ÀÌ CDetector ¶ó´Â ¼¹ö °´Ã¼¿¡ À§¿¡¼ ±¸ÇöÇÑ CServerDetector ¸¦ ³ÖÀÚ. Çì´õ¿¡ ¸â¹ö·Î CServerDetector *m_psd ¸¦ ³Ö°í, »ý¼ºÀÚ¿¡¼´Â NULL ·Î ÃʱâÈÇØ ÁÖ¸ç, OnStartPage ¿¡¼ ÇÒ´ç¹Þ°í, OnEndPage ¿¡¼ delete ÇØ ÁØ´Ù. ¸¸ÀÏÀ» À§Çؼ ÇÒ´ç¹Þ±â Àü¿¡ ÀÌ¹Ì °ªÀÌ ÀÖÀ¸¸é delete ÇØ ÁÖ°í,(¶Ç´Â ÇÒ´çÀ» ¹ÞÁö ¾Ê°í) OnEndPage ¿¡¼µµ delete Çϱâ Àü¿¡ NULL ÀÌÁö´Â ¾ÊÀºÁö È®ÀÎÇØ ÁÖ´Â °ÍÀÌ ÁÁ°Ú´Ù. ¹°·Ð ÇÊ¿äÇÑ ÆÄÀÏÀ» include ÇÏ°í Project Settings ¿¡¼ Additional include path ¸¦ ¼³Á¤ÇÏ´Â °ÍÀ» ÀØÁö ¾Ê´Â´Ù.
OnStartPage() ¿¡¼´Â AfxSocketInit() ¸¦ È£ÃâÇØ ÁÖµµ·Ï ÇÏ°í, StdAfx.h ¿¡¼ afxsock.h ¸¦ include Çϵµ·Ï ÇÑ´Ù.
ClassView ÀÇ IDetector ¿¡ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öÆ°À» ´·¯ º¸¸é Add Property... °¡ ÀÖ´Ù. ¿©±â¼ Property ¶ó´Â À̸§ÀÇ µÎ °³ÀÇ ÄÁÆ®·ÑÀÌ Àִµ¥, ÄÞº¸¹Ú½º¿¡¼´Â BSTR À» °í¸£°í ¿¡µðÆ® ¹Ú½º¿¡´Â Server ¶ó°í ÀÔ·ÂÇÑ´Ù. ±×·¯¸é CDetector Ŭ·¡½º ¾È¿¡ IDetector ±¸Çö ºÎºÐ¿¡ get_Server(BSTR *pVal) °ú put_Server(BSTR newVal) ÀÌ »ý°åÀ» °ÍÀÌ´Ù.
MFC ÀÇ CString ¿¡ ÀÌ¹Ì BSTR À» Áö¿øÇÏ´Â ±â´ÉÀÌ µé¾î°¡ ÀÖÀ¸¹Ç·Î ½±°Ô ÀÎÀÚ¸¦ Àü´Þ¹ÞÀ» ¼ö ÀÖ´Ù. get_Server() ¿¡¼µµ *pVal = m_psd->m_strServer.AllocSysString(); À̶ó°í ÇØ ÁÖ°í, put_Server() ¿¡¼´Â CString str(newVal); m_psd->m_strServer = str; °ú °°Àº °£´ÜÇÑ ¹®ÀåÀ¸·Î ¸ðµç °ÍÀ» ¸¶Ä£´Ù. ¹°·Ð m_psd °¡ NULL ÀÎÁö´Â È®ÀÎÇØ ÁÖ´Â °ÍÀÌ ÁÁÀ¸¸ç ¿©±â¼´Â ¿¡·¯ üũ¸¦ »ý·«ÇÑ´Ù.
ºñ½ÁÇÑ ¹æ¹ýÀ¸·Î Port ¶ó´Â Property ¸¦ ¼³Á¤ÇÏÀÚ. Add Property... ¿¡¼ ÄÞº¸¹Ú½º¿¡ long / ¿¡µðÆ® ¹Ú½º¿¡ Port ¶ó°í ÇÏÀÚ. get_Port() ´Â *pVal = m_psd->m_nPort; put_Port() ´Â m_psd->m_nPort = newVal; À̰͸¸À¸·Î Á·ÇÏ´Ù.
´ÙÀ½Àº WebServer Àε¥, ÀÌ°ÍÀº ReadOnly ÀÌ¸é µÇ±â ¶§¹®¿¡ put ÇÔ¼ö°¡ ÇÊ¿ä ¾ø´Ù. Add Property... ´ÙÀ̾ó·Î±×¿¡¼ put ÀÇ Ã¼Å©¸¦ ²ô°í Property Type ¿¡ BSTR À», Property Name ¿¡ WebServer ¸¦ ÁöÁ¤ÇÏ¸é µÈ´Ù. ±×¸®°í, ÀÌ Property ¸¦ Default Property ·Î ÁöÁ¤ÇÏÀÚ. ÁöÁ¤ÇÏ´Â ¹æ¹ýÀº, ClassView ÀÇ WebServerDetector classes ¾Æ·¡¿¡ IDetector °¡ ÀÖ°í ±× ¾Æ·¡ÀÇ WebServer ¸¦ Ŭ¸¯ÇØ º¸¸é WebServerDetector.idl ÆÄÀÏÀÌ ³ª¿À´Âµ¥, WebServer Property ¿¡ [propget, id(3), helpstring... ¿Í °°ÀÌ ¾º¾î ÀÖ´Ù. ¿©±â¼ id ¸¦ 3¿¡¼ 0 À¸·Î ¹Ù²Ù¾î ÁÖ¸é ÀÌ Property °¡ Default Property °¡ µÈ´Ù. ±¸ÇöÀº get_Server() ¿Í °°Àº ¹æ¹ýÀ¸·Î ÇÑ´Ù.
´ÙÀ½Àº Detect() ¶ó´Â Method ¸¦ ¸¸µé¾î ³ÖÀÚ. ±¸ÇöÀÌ ¾î·ÆÁö´Â ¾ÊÀ¸´Ï VARIANT µµ ÀÍÈú °â ¸®ÅÏ°ªÀº VARIANT ·Î Çϵµ·Ï ÇÏÀÚ. Add Method... ¿¡¼ Method Name ¿¡ Detect ¶ó°í ÇÏ°í, Parameters: ¿¡ [out, retval] LPVARIANT pvRet ¶ó°í ÀÔ·ÂÇÑ´Ù. ±×¸®°í ±¸ÇöÀº ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.
Detector.cpp Áß¿¡¼ |
1: STDMETHODIMP CDetector::Detect(LPVARIANT pvRet) 2: { 3: AFX_MANAGE_STATE(AfxGetStaticModuleState()) 4: 5: VariantInit(pvRet); 6: 7: int ret = m_psd->Detect(); 8: if (ret == 0) { 9: pvRet->vt = VT_I4; 10: pvRet->lVal = 0; 11: 12: return S_OK; 13: } 14: 15: CString strMsg; 16: 17: switch (ret) { 18: case CServerDetector::SOCKET_NOT_CREATED: 19: strMsg = _T("-1; Socket Not Created"); 20: break; 21: case CServerDetector::SERVER_UNKNOWN: 22: strMsg = _T("-2; Unknown Server:"); 23: break; 24: case CServerDetector::NOT_RESPONDING: 25: strMsg.Format(_T("-3; Server %s / Port %d Not Responding"), 26: (LPCTSTR)m_psd->m_strServer, m_psd->m_nPort); 27: break; 28: case CServerDetector::UNRECOGNIZED: 29: strMsg = "-4; Cannot Recognize Web Server Name"; 30: break; 31: case CServerDetector::UNKNOWN: 32: strMsg.Format( 33: _T("-5; Unexpected Error. Object Error: %d, System Error: %d"), 34: ret, GetLastError()); 35: break; 36: } 37: 38: pvRet->vt = VT_BSTR; 39: pvRet->bstrVal = strMsg.AllocSysString(); 40: 41: return S_OK; 42: } |
ÁÖÀÇÇÒ °Í Áß Çϳª´Â, ¼¼ °³ÀÇ ÇÁ·ÎÁ§Æ®¿¡¼ ¸ðµÎ MFC ¸¦ Static Link ·Î Ç϶ó´Â °ÍÀÌ´Ù. ¹°·Ð Dynamic Link ·Î Çصµ µÇÁö¸¸ MFC ¸¦ »ç¿ëÇÏ´Â ¾çµµ ¸¹Áö ¾ÊÀºµ¥ ±»ÀÌ ¹«°Å¿î MFC DLL À» ºÙ¿©¼ ¹èÆ÷ÇÒ ÇÊ¿ä´Â ¾ø±â ¶§¹®ÀÌ´Ù. ¾î·µç ¼¼ °³ÀÇ ÇÁ·ÎÁ§Æ®°¡ ¸ðµÎ °°Àº ÇüÅ°¡ ¾Æ´Ï¸é Linker °¡ Duplicate ¾î¼±¸ ÇÏ´Â ¿¡·¯ (LNK 2005) ¸¦ ³»°Ô µÉ °ÍÀÌ´Ù.
IIS °¡ ¼³Ä¡µÇ¾î ÀÖ´Â ½Ã½ºÅÛÀ¸·Î WebServerDetector.DLL À» À̵¿ÇÑ ´ÙÀ½ regsvr32.exe ¸¦ ÀÌ¿ëÇؼ µî·ÏÇÑ´Ù. À̶§ ÁÖÀÇÇÒ Á¡Àº DLL À» ¹ÙÅÁ ȸ鿡 ³õ°í µî·ÏÇÏÁö ¸»¶ó´Â °ÍÀÌ´Ù. ¹ÙÅÁ ȸ鿡 µÎ¸é ³ªÁß¿¡ °´Ã¼¸¦ »ý¼ºÇÏÁö ¸øÇÑ´Ù.
¸¸ÀÏ ´Ù½Ã ºôµåÇÒ ÀÏÀÌ »ý±ä´Ù¸é Á¦¾îÆÇ->¼ºñ½º ¿¡¼ IIS Admin Service ¶ó´Â °ÍÀ» ÁßÁö½ÃŲ ÈÄ µ¤¾î¾²¸é µÈ´Ù. µ¤¾î¾´ ´ÙÀ½¿¡ ¶Ç regsvr32 ¸¦ ÇÒ ÇÊ¿ä´Â ¾ø´Ù. µ¤¾î¾´ ´ÙÀ½ World Wide Web Publishing Service ¸¦ ´Ù½Ã ½ÃÀÛÇØ ÁÖ¸é º¯°æµÈ °ÍÀ» Å×½ºÆ®ÇØ º¼ ¼ö ÀÖ´Ù.
Detector.cpp Áß¿¡¼ |
<% Set sname = Request("server") Set port = Request("port") If port = "" Then port = 80 End If %><HTML> <HEAD><TITLE>Web Server Detector</TITLE></HEAD> <BODY> <FORM METHOD=get ACTION='<%=Request.ServerVariables("SCRIPT_NAME")%>'> Server Name: <INPUT TYPE=text NAME=server VALUE='<%=sname%>'> Port: <INPUT TYPE=text NAME=port VALUE='<%=port%>' SIZE=3> <INPUT TYPE=submit VALUE='Detect'> </FORM> <% If sname <> "" Then Set wsd = Server.CreateObject("WebServerDetector.Detector") wsd.Server = sname wsd.Port = port ret = wsd.Detect If ret = "0" Then suc = "successful" Else suc = "false" End If %> <P> Server ( <%=wsd.Server%> : <%=wsd.Port%> ) : <%=wsd.WebServer%> <P> Return Value: <%=suc%>, <%=ret%> <P> <% End If %> |
ÇÊÀÚ´Â À§¿¡ ÀûÀº °Í¿¡¼ ¾à°£À» ´õ ¼öÁ¤ÇÑ °ÍÀ» ¿Ã·Á µÎ¾ú´Ù. Connection Refused ¸¦ Ãß°¡ÇÏ¿´°í, Unknown Error ÀÏ ¶§´Â Win32 Socket ¿¡·¯ Á¾·ù¸¦ ¸®ÅÏÇϵµ·Ï Çß´Ù. Wrapper ¸¦ Àß ¸¸µé¾î µÎ¸é ¿¡·¯ 󸮱îÁö ÀÏ°üµÇ°Ô º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÇÑ °¡Áö ´õ. À§¿¡¼ WebServer ¶ó´Â °ÍÀ» Default Property ·Î µÎ¾ú´Ù. µû¶ó¼ ASP ÆäÀÌÁö ¾È¿¡¼ <%=wsd.WebServer%> ¶ó°í ÇÑ ´ë½Å¿¡ ±×³É <%=wsd%> ¶ó°í Çصµ µÈ´Ù.
ÀÌ ¹®¼ÀÇ ÀúÀÛ±ÇÀº Àú(±è±â¿ë)¿¡°Ô ÀÖÀ¸¸ç, ÀÌ ¹®¼¸¦ »ó¾÷ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ´©±¸¶óµµ ÀÚÀ¯·Ó°Ô ¹èÆ÷/ÀοëÇÒ ¼ö ÀÖÀ¸¸ç, ¼öÁ¤ÇÑ °æ¿ì ¿øÀúÀÚ, ¼öÁ¤ÇÑ »ç¶÷, ¼öÁ¤ÇÑ ºÎºÐÀ» ¸í½ÃÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù.