DLL°ú À¥¼­ºñ½º

 

 ¿©±â¼­´Â °£´ÜÇÑ °è»ê±â¸¦ ¸¸µé°í, °è»ê ±â´É(»çÄ¢¿¬»ê)À» ¼öÇàÇÏ´Â DLLÀ» ¸¸µé¾î ±× DLLÀ» »ç¿ëÇÏ¿© º¯°æÇØ º» ÈÄ, À¥¼­ºñ½º·Î ¸¸µé¾î ¿ø°Å¸®¿¡¼­ ±× °è»ê ±â´ÉÀ» È£ÃâÇÒ ¼ö ÀÖµµ·Ï ±¸¼ºÇÒ °ÍÀÌ´Ù. DLL ¸¸µå´Â ¹æ¹ý°ú À¥¼­ºñ½º ¸¸µå´Â ¹æ¹ýÀÌ ¾ó¸¶³ª °£´ÜÇÑÁö °æÇèÇÒ ¼ö ÀÖ´Â ÁÁÀº ±âȸ°¡ µÉ °ÍÀÌ´Ù.

   °è»ê±â´Â ´ÙÀ½°ú °°ÀÌ Á¦ÀÛÇÏ¿´´Ù.

   ÀÌ ÇÁ·Î±×·¥Àº ÀÌÁ¦ ½±°Ô ¸¸µé ¼ö ÀÖÀ¸¸®¶ó »ý°¢µÇ¹Ç·Î ·çƾÀ» ÇϳªÇϳª ¼³¸íÇÏÁö´Â ¾ÊÀ» °ÍÀÌ´Ù.

   ÀÌ ·çƾÁß = ¹öưÀ» ¼±ÅÃÇßÀ» ¶§ È£ÃâµÇ´Â Method¸¦ º¸¸é ´ÙÀ½°ú °°´Ù.

        private void buttonEqual_Click(object sender, System.EventArgs e)

        {

            dInput2 = double.Parse(this.textBox1.Text);

            switch(cCalc)

            {

                case '+':

                    dResult = dInput1 + dInput2;

                    break;

 

                case '-':

                    dResult = dInput1 - dInput2;

                    break;

 

                case '*':

                    dResult = dInput1 * dInput2;

                    break;

 

                case '/':

                    dResult = dInput1 / dInput2;

                    break;

            }

            bCalculated = true;

            this.textBox1.Text = dResult.ToString();

        }

   ÀÌÁß »çÄ¢¿¬»êÀ» ÇÏ´Â ºÎºÐÀ» DLL·Î ¸¸µé°í »ç¿ëÇϵµ·Ï ¼öÁ¤ÇØ º¸°Ú´Ù.

  DLLÀ» Á¦ÀÛÇϱâ À§ÇØ ÇÁ·ÎÁ§Æ®¸¦ Çϳª Ãß°¡ÇØ º¸ÀÚ. ¼Ö·ç¼Ç Ž»ö±âÀÇ ¼Ö·ç¼Ç(TreeÁß ÃÖ»óÀ§ Ç׸ñ)¿¡¼­ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» ¼±ÅÃÇÏ¿© »ý¼ºµÈ ÆË¾÷ ¸Þ´º Ãß°¡ÀÇ ºÎ¸Þ´º »õÇÁ·ÎÁ§Æ®¸¦ ¼±ÅÃÇÏ¸é ´ÙÀ½°ú °°Àº ´ëÈ­ »óÀÚ°¡ »ý¼ºµÈ´Ù.

   Å¬·¡½º ¶óÀ̺귯¸®¸¦ ¼±ÅÃÇϰí À̸§¿¡ ClassLibrary1À» CalcDll·Î º¯°æÇÑ ÈÄ È®ÀÎÀ» ¼±ÅÃÇÏ¸é ´ÙÀ½°ú °°ÀÌ CalcDll ÇÁ·ÎÁ§Æ®°¡ Çϳª Ãß°¡µÈ´Ù.

  ¼Ö·ç¼Ç Ž»ö±â¿¡¼­ Class1.cs¸¦ CalcDll.cs·Î ¼öÁ¤Çϰí, Source¿¡¼­ Class1À» Calc·Î ¼öÁ¤ÇÑ ÈÄ ´ÙÀ½°ú °°Àº Method¸¦ Ãß°¡ÇÑ´Ù.

        public double Add(double dValue1, double dValue2)

        {

            return dValue1 + dValue2;

        }

 

        public double Subtract(double dValue1, double dValue2)

        {

            return dValue1 - dValue2;

        }

 

        public double Multiplex(double dValue1, double dValue2)

        {

            return dValue1 * dValue2;

        }

 

        public double Divide(double dValue1, double dValue2)

        {

            return dValue1 / dValue2;

        }

  

  ºôµå¸¦ ¼öÇàÇϸé CalcDll.dllÀÌ »ý¼ºµÈ´Ù.

 

   ÀÌÁ¦ CalcDll.dllÀ» »ç¿ëÇØ º¸ÀÚ.

  CalcDll.dllÀ» »ç¿ëÇÒ Calculator ÇÁ·ÎÁ§Æ®ÀÇ ÂüÁ¶¿¡¼­ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» ¼±ÅÃÇÏ¿© »ý¼ºµÈ ÆË¾÷ ¸Þ´º¿¡¼­ ÂüÁ¶ Ãß°¡¸¦ ¼±ÅÃÇÏ¸é ´ÙÀ½°ú °°Àº ´ëÈ­ »óÀÚ°¡ »ý¼ºµÈ´Ù.

   Ã£¾Æº¸±â ¹öưÀ» ¼±ÅÃÇÏ¿© CalcDll.dllÀ» ¼±ÅÃÇØµµ µÇ³ª, °°Àº ¼Ö·ç¼Ç¿¡ µé¾î ÀÖ´Â ÆÄÀÏÀº ÇÁ·ÎÁ§Æ® ÅÇÀ» ¼±ÅÃÇÏ¿© ¼±ÅÃÇÏ¸é µÈ´Ù. ´ÙÀ½Àº ÇÁ·ÎÁ§Æ® ÅÇÀ» ¼±ÅÃÇÑ ¸ð¾çÀÌ´Ù.

   ¸¶¿ì½º·Î CalcDll¸¦ ´õºíŬ¸¯Çϰųª ¼±Åà ¹öưÀ» ½ÇÇà ÇÑ ÈÄ È®ÀÎÀ» ¼±ÅÃÇϸé ÂüÁ¶°¡ µÈ´Ù.

   using CalcDll;À» ¼±¾ðÇÏ°í ¾Õ¿¡¼­ ¼³¸íÇÑ buttonEqual_Click Method¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤Çϸé CalcDll.dllÀ» »ç¿ëÇÏ¿© ±¸¼ºÇÑ °ÍÀÌ µÈ´Ù.

 

        private void buttonEqual_Click(object sender, System.EventArgs e)

        {

            dInput2 = double.Parse(this.textBox1.Text);

            Calc calc = new Calc();

            switch(cCalc)

            {

                case '+':

                    dResult = calc.Add(dInput1, dInput2);

                    break;

 

                case '-':

                    dResult = calc.Subtract(dInput1, dInput2);

                    break;

 

                case '*':

                    dResult = calc.Multiplex(dInput1, dInput2);

                    break;

 

                case '/':

                    dResult = calc.Divide(dInput1, dInput2);

                    break;

            }

            bCalculated = true;

            this.textBox1.Text = dResult.ToString();

        }

 

  ÀÌÁ¦ À¥¼­ºñ½º·Î ¸¸µé¾î¾ß ÇÑ´Ù. À¥¼­ºñ½º¸¦ ¸¸µé±â Àü¿¡ À¥¼­ºñ½ºÀÇ °³³äÀ» ¸ÕÀú ¾Ë¾Æ º¸ÀÚ. À¥¼­ºñ½º´Â .NET À¥¼­ºñ½º, .NET XML À¥¼­ºñ½º, ASP.NET À¥¼­ºñ½º, ASP.NET XML À¥¼­ºñ½ºµîÀ¸·Î ´Ù¾çÇÏ°Ô ºÒ¸®¿ö Áø´Ù.

  ÀÎÅͳÝÀ» ÅëÇÑ ¿ø°Å¸® µ¥ÀÌÅÍ Åë½Å ¹æ½Ä¿¡´Â ¿©·¯ °¡Áö ¹æ¹ýÀÌ ÀÖ´Ù. ±× Áß °¡Àå ¸¹ÀÌ »ç¿ëÇß´ø ¹æ½ÄÀÌ TCP¸¦ Á÷Á¢ ±¸¼ºÇÏ¿© Åë½ÅÇÏ´Â ¹æ½ÄÀ̾ú´Ù. ÀÌ ¹æ½ÄÀº ¸¹ÀÌ »ç¿ëµÇ´Ù ÀÌÁ¦ Á¡Á¡ ÁÙ¾î µé¾î Àß »ç¿ëµÇ°í ÀÖÁö ¾Ê´Ù. ÀÌÀ¯´Â ¹æÈ­º® ¶§¹®ÀÌ´Ù. Windows XPÀÌ»ó¿¡ ¹æÈ­º®ÀÌ ¼³Ä¡µÇ¾î ±âº»ÀûÀ¸·Î HTTP Åë½ÅÀ» À§ÇÑ 80¹ø Æ÷Æ®¸¸ ¿­¾î ³õ°í ÀÖ´Ù. ÀÌ °æ¿ì Ưº°È÷ ¼³Á¤À» ÇÏÁö ¾Ê´ÂÇÑ 80¹ø ¿ÜÀÇ Æ÷Æ®·Î´Â Åë½ÅÀ» ¼öÇàÇÒ ¼ö ¾ø´Ù. µû¶ó¼­ S/WµéÀº 80¹ø Æ÷Æ®·Î Åë½ÅÇÏ´Â ¹æ½ÄÀÌ ÇÊ¿äÇÏ°Ô µÇ¾ú´Ù.

   ±×·¯³ª TCP¸¦ Á÷Á¢ ±¸¼ºÇÏ¿© Åë½ÅÇÏ´Â ¹æ½Ä¿¡¼­´Â 80¹ø Æ÷Æ®¸¦ ÀÌ¹Ì HTTP Åë½ÅÀ» À§ÇØ IIS ¼­¹ö°¡ ÇÒ´ç ¹Þ¾Æ »ç¿ëÇϰí Àֱ⠶§¹®¿¡ »ç¿ëÇÒ ¼ö ¾ø´Ù. À̸¦ ÇØ°áÇϱâ À§ÇØ °í¾ÈµÈ ¹æ½ÄÀÌ XML À¥¼­ºñ½ºÀÌ´Ù.

  ÀÌ ¹æ½ÄÀº Åë½ÅÇϰíÀÚ ÇÏ´Â µ¥ÀÌÅ͸¦ XMLÀ̶ó´Â Ç¥ÁØ ¹®¼­ ÇüÅ·ΠÀÛ¼ºÇÏ¿© IIS ¼­¹ö¿¡°Ô Àü¼ÛÇØ ´Þ¶ó°í Çϸé, ¼ö½Åó¿¡¼­´Â ±× ¹®¼­¸¦ ¹Þ¾Æ µ¥ÀÌÅ͸¦ ÇØ¼®ÇÏ¿© ÃëµæÇÑ ÈÄ »ç¿ëÇÏ´Â ¹æ½ÄÀÌ´Ù.

   Áï µ¥ÀÌÅÍ ÇüÅ´ XMLÀ» »ç¿ëÇÏ°í µ¥ÀÌÅÍ Àü¼ÛÀº Á÷Á¢ TCP¸¦ ±¸¼ºÇÏ¿© »ç¿ëÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó IIS ¼­¹ö¸¦ ÅëÇØ Àü¼ÛÀ»ÇÏ´Â ¹æ½ÄÀÌ´Ù.

  ÀÌ ÀÌ·ÐÇÏ¿¡¼­ XML À¥¼­ºñ½º¸¦ ±¸¼ºÇϰíÀÚ ÇÑ´Ù¸é XML ¹®¼­ ¾ç½Ä, IIS ¼­¹ö¿¡ Àü¼ÛÀ» ¿äûÇÏ´Â ¹æ½Ä µî ¾Ë¾Æ¾ß ÇÒ °ÍÀÌ ¾ÆÁÖ ¸¹À» µí ÇÏ´Ù. ±×·¯³ª C#¿¡¼­´Â ÀÌ·± ºÎºÐÀ» ÀüÇô ¸ô¶óµµ µÈ´Ù. ÀÌÁ¦ ±× ±¸¼º ¹æ½ÄÀ» »ìÆì º¸µµ·Ï ÇϰڴÙ.

  XML À¥¼­ºñ½º¸¦ ±¸¼ºÇϱâ À§ÇØ ÇÁ·ÎÁ§Æ®¸¦ Çϳª Ãß°¡ ÇØº¸ÀÚ. ¼Ö·ç¼Ç Ž»ö±âÀÇ ¼Ö·ç¼Ç(TreeÁß ÃÖ»óÀ§ Ç׸ñ)¿¡¼­ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» ¼±ÅÃÇÏ¿© »ý¼ºµÈ ÆË¾÷ ¸Þ´º Ãß°¡ÀÇ ºÎ¸Þ´º »õÇÁ·ÎÁ§Æ®¸¦ ¼±ÅÃÇÏ¸é ´ÙÀ½°ú °°Àº ´ëÈ­ »óÀÚ°¡ »ý¼ºµÈ´Ù.

ASP.NET À¥ ¼­ºñ½º¸¦ ¼±ÅÃÇϰí À§Ä¡ÀÇ WebService1À» CalcWebService·Î ¼öÁ¤ÇÑ ÈÄ È®ÀÎÀ» ¼±ÅÃÇÏ¸é ´ÙÀ½°ú °°ÀÌ CalcWebService ÇÁ·ÎÁ§Æ®°¡ Ãß°¡ µÈ´Ù.

Service1.asmx¸¦ CalcWebService.asmx·Î º¯°æÇϰí, ÇØ´ç ÆÄÀÏ¿¡¼­ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» ¼±ÅÃÇÏ¿© »ý¼ºµÈ ÆË¾÷ ¸Þ´º¿¡¼­ ÄÚµå º¸±â¸¦ ¼±ÅÃÇÏ¿© ¿­¸° Äڵ忡¼­ Service1À» Calc·Î  ¼öÁ¤ÇÑ ÈÄ ´ÙÀ½°ú °°Àº Method¸¦ Ãß°¡ÇÑ´Ù.

        [WebMethod]

        public double Add(double dValue1, double dValue2)

        {

            return dValue1 + dValue2;

        }

 

        [WebMethod]

        public double Subtract(double dValue1, double dValue2)

        {

            return dValue1 - dValue2;

        }

 

        [WebMethod]

        public double Multiplex(double dValue1, double dValue2)

        {

            return dValue1 * dValue2;

        }

 

        [WebMethod]

        public double Divide(double dValue1, double dValue2)

        {

            return dValue1 / dValue2;

        }

 

  À§ÀÇ ³»¿ëÀ» º¸¸é DLL Á¦ÀÛ°ú °ÅÀÇ °°°í ´Ù¸¥Á¡À̶ó¸é [WebMethod]¶ó´Â Attribute¸¸ Ãß°¡µÈ °ÍÀ» º¼ ¼ö ÀÖ´Ù. ÀÌÁ¦ ºôµå¸¦ ¼öÇàÇϸé CalcWebService.dllÀÌ »ý¼ºµÈ´Ù.

   XML À¥¼­ºñ½º ¸¸µå´Â °ÍÀÌ DLL ¸¸µå´Â °Í°ú º°·Î ´Ù¸£Áö ¾Ê´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.

   À¥¼­ºñ½º´Â ³×Æ®¿öÅ©·Î ¼­ºñ½º¸¦ Á¦°øÇÏ´Â °ÍÀ̹ǷΠŬ¶óÀÌ¾ðÆ® »ç¾çµµ »ý°¢ÇØ¾ß ÇÑ´Ù. ¾ÆÁ÷±îÁö Windows 7ÀÌ ¸¹ÀÌ »ç¿ëµÇ°í ÀÖÀ¸³ª ¿©ÀüÈ÷ XP, VISTA µîµµ Á¸ÀçÇÑ´Ù. ¹èÆ÷ÀÇ ÆíÀǸ¦ »ý°¢Çؼ­ ¿©±â¼­´Â .NET Framework 2.0À» »ç¿ëÇϵµ·Ï ÇÑ´Ù.

   CalcWebService ÇÁ·ÎÁ§Æ®¿¡¼­ ¼Ó¼ºÀ» ¼±ÅÃÇÏ¿© »ý¼ºµÈ È­¸é¿¡¼­ ´ÙÀ½°ú °°ÀÌ .NET Framework 2.0À¸·Î ¼³Á¤ÇÑ´Ù.

  ÄÄÆÄÀÏÀ» ¼öÇàÇϸé .NET Framework 2.0À¸·Î ¹Ù²î¾î ȯ°æÀÌ ±¸ÃàµÈ´Ù.

 

  ÀÌÁ¦ XML À¥¼­ºñ½º¸¦ »ç¿ëÇØ º¸µµ·Ï ÇÏÀÚ.

  CalcWebService.dllÀ» »ç¿ëÇÒ Calculator ÇÁ·ÎÁ§Æ®ÀÇ ÂüÁ¶¿¡¼­ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» ¼±ÅÃÇÏ¿© »ý¼ºµÈ ÆË¾÷ ¸Þ´º¿¡¼­ À¥ ÂüÁ¶ Ãß°¡¸¦ ¼±ÅÃÇÏ¸é ´ÙÀ½°ú °°Àº ´ëÈ­ »óÀÚ°¡ »ý¼ºµÈ´Ù.

  ·ÎÄà ÄÄÇ»ÅÍÀÇ À¥ ¼­ºñ½º¸¦ ¼±ÅÃÇÏ¸é ´ëÈ­ »óÀÚ´Â ´ÙÀ½°ú °°ÀÌ ¹Ù²ï´Ù.

  CalcWebService¸¦ ¸¶¿ì½º·Î Ŭ¸¯ÇÏ¸é ´ëÈ­ »óÀÚ´Â ´ÙÀ½°ú °°ÀÌ ¹Ù²ï´Ù.

  À¥ ÂüÁ¶ À̸§À» WebService(using ÇÒ ¶§ »ç¿ëÇÏ´Â À̸§ Áß ÀϺηΠ±×´ë·Î µÎ¾îµµ »ó°ü ¾ø´Ù.)·Î ¹Ù²Ù°í ÂüÁ¶ Ãß°¡ ¹öưÀ» ¼±ÅÃÇϸé ÂüÁ¶°¡ µÈ´Ù.

   ÀÌÁ¦ usingÀ» »ç¿ëÇÏ¿© namespace¸¦ µî·ÏÇϰí Calc Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é µÈ´Ù. namespace ¸íÀº ÀÏ¹Ý DLL°ú´Â ´Ù¸£°Ô À¥¼­ºñ½º¸¦ »ç¿ëÇÏ´Â ¾îÇø®ÄÉÀÌ¼Ç À̸§(Calculator) . À¥ ÂüÁ¶ À̸§(WebService, º¯°æÇÏÁö ¾Ê¾ÒÀ¸¸é localhost)À» »ç¿ëÇÑ´Ù.

   Áï using Calculator.Webservice;¸¦ ¼±¾ðÇϰí, ³ª¸ÓÁö´Â DLL »ç¿ëÇÒ ¶§ ¿Í °°Àº Source¸¦ »ç¿ëÇÏ¸é µ¿ÀÛÀ» ÇÑ´Ù.

   ÀÌÁ¦ ½ÇÇà ÇÏ¿© óÀ½ = ¹öưÀ» ´©¸¦ ¶§ ¼Óµµ°¡ Á¶±Ý ´À¸®°í, ±× ÀÌÈÄ ºÎÅÍ´Â ¶È°°ÀÌ µ¿ÀÛÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.

  ¾Õ¿¡¼­ ¼³¸íÇÑ ¿¹Á¦´Â ¼³¸íÀÇ ÆíÀǸ¦ À§ÇØ °£´ÜÇÑ ¿¹Á¦¸¦ »ç¿ëÇßÀ¸¹Ç·Î, ÀÌ°É ¾îµð¿¡´Ù ½á¾ß ÇÒ Áö Å©°Ô ¿Í´êÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. ÀÌ ±â´ÉÀº ½ÇÇàÆÄÀÏÀÌ ½ÇÇàµÇ´Â PCÀÇ ÀÚ¿øÀÌ ¾Æ´Ñ ´Ù¸¥ PC(¼­¹ö PC)ÀÇ ÀÚ¿øÀ» ÀÌ¿ëÇÏ¿© ¼­¹ö¿¡¼­ ¿øÇÏ´Â ±â´ÉÀ» ¼öÇàÇϰí, ±× °á°ú¸¦ ½ÇÇàµÇ´Â PC·Î Àü¼ÛÇÏ´Â ±â´ÉÀÌ ÇÊ¿äÇÒ °æ¿ì ¾ÆÁÖ °£´ÜÈ÷ ±¸ÇöÇÒ ¼ö ÀÖ´Ù.

  ÇÊÀÚ°¡ ȸ»ç¿¡¼­ Çϰí ÀÖ´Â ÀÏÀ» ¿¹·Î ¼³¸íÇØ º¸°Ú´Ù. ÇÊÀÚ´Â HMI(Human Machine Interface) ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇϰí ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ´Ù¾çÇÑ Controller¿Í Åë½ÅÇÏ¿© ÇöÀåÀÇ ±â°èÀåÄ¡µéÀ» Á¦¾î ¹× °¨½Ã ÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥À» Controller¿Í ¿¬°áµÇ¾î ÀÖÁö ¾ÊÀº ¿ø°Å¸® PC¿¡¼­ ¿î¿µÀ» ÇϰíÀÚ ÇÒ °æ¿ì ÇöÀå¿¡ ¼³Ä¡µÈ ¼­¹ö¿Í Åë½ÅÀ» ÅëÇØ µ¥ÀÌÅ͸¦ ÁÖ°í ¹Þ¾Æ¾ß ÇÑ´Ù. ÀÌ °æ¿ì °¨½ÃÇϰíÀÚ ÇÏ´Â ±â°èÀÇ ¸®½ºÆ®¿Í ±×¿¡ ÇØ´çÇÏ´Â °ªÀÇ ¸®½ºÆ®(ref·Î ³Ñ°ÜÁÜ)¸¦ ÀÎÀÚ·Î ³Ñ°Ü ¼­¹ö¿¡¼­ °ªÀ» ä¿ö ÁÖ¸é, Ŭ¶óÀÌ¾ðÆ®¿¡¼­´Â ±× °ªÀ» È­¸é»ó¿¡ Ç¥½ÃÇÒ ¼ö ÀÖµµ·Ï ±¸¼ºÇÏ¸é °£´ÜÈ÷ ±¸ÇöÀÌ µÈ´Ù. 

   ÇöÀç À¥¼­ºñ½º¸¦ »ç¿ëÇϱâ´Â ÇÏÁö¸¸ °°Àº PC¿¡¼­ µ¿ÀÛÇϰí ÀÖ´Ù. ÀÌÁ¦ ´Ù¸¥ PC¿¡¼­ µ¿ÀÛÇϵµ·Ï ÇÏ´Â ºÎºÐ ¼³Á¤À» ¾Ë¾Æº¸ÀÚ.

   

   ¼Ö·ç¼Ç Ž»ö±â¿¡¼­ WebService¸¦ ¼±ÅÃÇÏ°í ¼Ó¼ºÀ» º¸¸é À¥ÂüÁ¶ URLÀÌ localhost·Î ¼³Á¤µÇ¾î ÀÖ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ´Ù¸¥ PC¿¡¼­ µ¿ÀÛÇϱâ À§Çؼ­´Â localhost ´ë½Å ¼­¹öÀÇ IP¸¦ ÀÔ·ÂÇÏ¸é µÈ´Ù.

   IP¸¦ ÀÔ·ÂÇϰí ÄÄÆÄÀÏ ÇÑ ÈÄ ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°ÀÌ È­¸é¿¡ ³ªÅ¸³­´Ù.

   

 ½ÇÇà µÉ ¶§ ¸¶´Ù ÀÌ·¸°Ô È­¸é¿¡ ³ªÅ¸³ª¸é ÀÌ ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â »ç¶÷Àº ¾ø°Ô µÉ °ÍÀÌ´Ù. ¿©·¯ºÐµéÀº ÀÌ ºÎºÐÀ» ÇØ°áÇϱâ À§ÇØ ¾Æ·¡ÀÇ ³»¿ëÀ» »ç¿ëÀڵ鿡°Ô ¼³¸í¼­·Î Á¦°øÇÏ¿© º¸¾È ¼³Á¤À» Çϵµ·Ï ÇØ¾ß ÇÒ °ÍÀÌ´Ù.

   ¸ÕÀú .NET Framework Configurator 2.0À» ¼³Ä¡ÇÑ´Ù.

   Á¦¾îÆÇÀ» ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°ÀÌ È­¸é¿¡ ³ªÅ¸³­´Ù.

  °ü¸® µµ±¸¸¦ ¼±ÅÃÇϸé È­¸éÀº ´ÙÀ½°ú °°ÀÌ ¹Ù²ï´Ù.

   

   Microsoft .NET Framework 2.0 ConfigurationÀ» ¼±ÅÃÇÏ¿© ¿ÞÂÊ Æ®¸®¸¦ ¿­½ÉÈ÷ ÆîÄ¡¸é(³»ÄÄÇ»ÅÍ - ·±Å¸ÀÓ º¸¾È Á¤Ã¥ - ÄÄÇ»ÅÍ - All_Code) ´ÙÀ½°ú °°ÀÌ È­¸é¿¡ ³ªÅ¸³­´Ù.

   ÄÚµå ±×·ì ¼Ó¼º ÆíÁýÀ» ¼±ÅÃÇÏ¿© ±ÇÇÑ ÁýÇÕ ÅÇÀ» ¼±ÅÃÇÏ¸é ´ÙÀ½°ú °°ÀÌ È­¸é¿¡ ³ªÅ¸³­´Ù.

   NothingÀ» FullTrust·Î ¼±ÅÃÇÏ¸é º¸¾È °æ°í´Â ¾ø¾î Áö°Ô µÉ °ÍÀÌ´Ù.

 

  ¾Õ¿¡¼­ ¼³¸íÇÑ ¹æ½ÄÀ¸·Î ¼­¹ö IP¸¦ ¼³Á¤ÇÏ°Ô µÇ¸é ¼­¹ö°¡ ¹Ù²î¾úÀ» ¶§ ¼öÁ¤ÇÒ ¹æ¹ýÀÌ ¾ø´Ù. À̸¦ À§ÇØ Reference.cs¸¦ ¸¸µé¾î ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÏ´Ù.

 namespace Calcuator.WebService

{

    public class CalcServiceEx : CalcService{

        public CalcServiceEx(string strAddr)

        {

            base.Url = "http://" + strAddr + "/CalcWebService/CalcService.asmx";

        }

     }

}

 

  »ý¼ºÀÚÀÎ strAddr¿¡ ÁÖ¼Ò¸¦ ÀÔ·ÂÇÏ°Ô µÇ´Âµ¥ À̺κÐÀ» ÆÄÀÏ¿¡¼­ Àо ¼³Á¤ÇÏ´Â µî ÇÊ¿äÇÑ ÇüÅ·Π±¸¼ºÇÏ¸é ¼­¹ö°¡ ¹Ù²î¾úÀ» ¶§ ¼Ò½º ¼öÁ¤ÇÏÁö ¾Ê°í ±¸¼ºÀÌ °¡´ÉÇÏ°Ô µÈ´Ù.

 

   º¸¾È ¼³Á¤À» ¼öµ¿À¸·ÎÇÏ´Â ¹æ½ÄÀ» ¼³¸íÇß´Ù. ÀÌ·¸°Ô ¼öµ¿À¸·Î ¼¼ÆÃÇϵµ·Ï ¼³¸í¼­¸¦ ¸¸µé¾î ¹èÆ÷ÇØµµ µÇ³ª ¾Æ¹«·¡µµ ½ÇÁ¦ Á¦Ç° °³¹ßÀ» »ý°¢ÇÏ¸é ¹«¸®°¡ ÀÖ´Ù. À̸¦ °£´ÜÈ÷ ¼³Á¤Çϵµ·Ï ±¸¼ºÇÏ´Â ¹æ½Ä¿¡ ´ëÇØ ¼³¸íÇϰڴÙ.

   ¸ÕÀú CalSetupÀ̶ó´Â ÇÁ·ÎÁ§Æ®·Î Äܼ־îÇø®ÄÉÀ̼ÇÀ» ¸¸µç´Ù.

   ÀÌ ¶ÇÇÑ .NET Framework 2.0À¸·Î ¸¸µç´Ù.

   System.Deployment, System.Web, System.Windows.FormsÀ» ÂüÁ¶ Ãß°¡ÇÑ´Ù.

   Program.cs¸¦ ¿­¾î ´ÙÀ½°ú °°ÀÌ ¼Ò½º¸¦ ³Ö´Â´Ù(Copy & Paste Çϼ¼¿ä).

using System;

using System.Collections.Generic;

using System.Text;

using System.Security;

using System.Security.Policy;

using System.Windows.Forms;             //ÂüÁ¶ Ãß°¡¿¡¼­ dll ÂüÁ¶ÇÔ

using System.Web;                       //ÂüÁ¶ Ãß°¡¿¡¼­ dll ÂüÁ¶ÇÔ

using System.Collections.Specialized;

using System.Deployment.Application;    //ÂüÁ¶ Ãß°¡¿¡¼­ dll ÂüÁ¶ÇÔ

namespace SmartCas

{

    class Program

    {

        static NameValueCollection GetQueryStringParameters()

        {

            NameValueCollection nameValueTable = new NameValueCollection();

            try

            {

                if (ApplicationDeployment.IsNetworkDeployed)

                {

                    string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;

                    nameValueTable = HttpUtility.ParseQueryString(queryString);

                }

            }

            catch (Exception)

            {

            }

            return (nameValueTable);

        }

 

        static void MakePolicy()

        {

            try

            {

                string strServer = "";

                NameValueCollection NVC = new NameValueCollection();

                NVC = GetQueryStringParameters();

                if (NVC.Count > 0)

                {

                    strServer = NVC["Server"];

                }

                if (string.IsNullOrEmpty(strServer))

                    strServer = "localhost";

                string strUrl = "http://" + strServer + "/*";

                // Machine(Local) ¿µ¿ªÀ» Á¢±ÙÇÑ´Ù.

                const string userPolicyLevel = "Machine";

                PolicyLevel level = null;

                System.Collections.IEnumerator ph = System.Security.SecurityManager.PolicyHierarchy();

                //Machine ·¹º§À» °¡Á®¿Â´Ù.

                while (ph.MoveNext())

                {

                    level = (PolicyLevel)ph.Current;

                    if (level.Label == userPolicyLevel)

                        break;

                }

 

                // ÀÌ¹Ì Ãß°¡°¡ µÇ¾ú´ÂÁö È®ÀÎÇÑ´Ù.

                foreach (CodeGroup group in level.RootCodeGroup.Children)

                {

                    if (group.Name == "CALC")

                    {

                        level.RootCodeGroup.RemoveChild(group);

                        break;

                    }

                }

                //±ÇÇÑ»ý¼º

                NamedPermissionSet permissionSet = new NamedPermissionSet("Everything");

                PolicyStatement policyStatement = new PolicyStatement(permissionSet);

                //URL¸â¹ö½± »ý¼º

                IMembershipCondition membership = new UrlMembershipCondition(strUrl);

                //ÄÚµå±×·ì¿¡ Ãß°¡

                UnionCodeGroup cg = new UnionCodeGroup(membership, policyStatement);

                //À̸§»ý¼º

                cg.Name = "CALC";

                cg.Description = " CALC º¸¾ÈÁ¤Ã¥";

                // ±×·ìÃß°¡

                level.RootCodeGroup.AddChild(cg);

                //Àû¿ë

                SecurityManager.SavePolicy();

                MessageBox.Show("¼­¹ö(" + strServer + ")¿¡ ´ëÇÑ º¸¾È ¼³Á¤ÀÌ ¿Ï·áµÇ¾ú½À´Ï´Ù.", "¾Ë¸²");

            }

            catch (Exception e)

            {

                System.Windows.Forms.MessageBox.Show(e.ToString(), "¾Ë¸²");

            }

        }

 

        static void Main(string[] args)

        {

            MakePolicy();

        }

    }

}

  ½ÇÇàÀ» ÇÏ°Ô µÇ¸é ÄܼÖâÀÌ È­¸é¿¡ ³ªÅ¸³ª°Ô µÇ´Âµ¥ À̸¦ ¾ø¾Ö±â À§ÇØ, ÇÁ·ÎÁ§Æ®(CalcSetup)¿¡¼­ ¸¶¿ì½º ¿ìÃø¹öưÀ» ¼±ÅÃÇØ¼­ ¼Ó¼ºÀ» ¼±ÅÃÇÏ¸é ´ÙÀ½°ú °°ÀÌ ´ëÈ­ »óÀÚ°¡ ³ªÅ¸³­´Ù.

   ÄÜ¼Ö ÀÀ¿ë ÇÁ·Î±×·¥À» Windows ÀÀ¿ë ÇÁ·Î±×·¥À¸·Î ¼öÁ¤ÇÑ´Ù.

   ÇÁ·ÎÁ§Æ®(CalcSetup)¿¡¼­ ¸¶¿ì½º ¿ìÃø¹öưÀ» ¼±ÅÃÇØ¼­ °Ô½Ã¸¦ ¼±ÅÃÇÏ¸é ´ÙÀ½°ú °°ÀÌ ´ëÈ­ »óÀÚ°¡ ³ªÅ¸³­´Ù.

   °Ô½ÃÇÒ À§Ä¡¸¦ IIS ¼­¹ö À§Ä¡ ³»ºÎ¿¡ Àû´çÈ÷ ¼³Á¤ÇÑ´Ù.

   ¸¶Ä§À» ´©¸£¸é ´ÙÀ½°ú °°ÀÌ ¼³Ä¡ ÇÒ ¼ö ÀÖ´Â À¥È­¸éÀÌ È­¸é¿¡ ³ªÅ¸³³´Ï´Ù.

   ¼³Ä¡¸¦ ¼±ÅÃÇÏ¸é ¼³Ä¡°¡ µË´Ï´Ù.

   ÀÌÁ¦ µ¿ÀûÀ¸·Î ¿¬°áÇÑ ¼­¹öÀÇ Á¤º¸¸¦ ³Ö¾î ¼³Ä¡ÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸ÀÚ. CalcSetupÀ§Ä¡(C:\inetpub\wwwroot\CalcSetup\)¿¡ Html ÆÄÀÏÀ» Çϳª ¸¸µé¾î ³Ö°í ¾Æ·¡¿Í °°ÀÌ ÀÛ¼ºÇÑ´Ù.

<html>

 

<head>

<meta http-equiv="content-type" content="text/html; charset=euc-kr">

<title>½ÇÇà¹æ¹ý</title>

<meta name="generator" content="Namo WebEditor v6.0">

<SCRIPT LANGUAGE="JavaScript">

<!--

function ExecuteSetup()

{

    window.location.href = "CalSetup.application?Server=" + window.location.host;   

}

-->

</SCRIPT>

</head>

 

 

 

<BODY ONLOAD="Initialize();">

 

 

 

<b><font size="2">NET º¸¾È ¼³Á¤À» ¼öÇàÇÕ´Ï´Ù.</font></b><font size="2"></font><p align="left"><b><font size="2">.</font></b><font size="2">NET º¸¾È ¼³Á¤À» À§ÇÏ¿© </font><font size="2"><input type="button" value = "¿©±â" ONCLICK="ExecuteSetup();">

¸¦&nbsp;¼±ÅÃÇÏ¿© ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏ¸é µË´Ï´Ù.</font></p>

 

<p align="center">&nbsp;</p>

</body>

 

</html>

 

  Internet Explore¸¦ ½ÇÇàÇÏ¿© ±× À§Ä¡¸¦ ÀÔ·ÂÇÑ´Ù.

   Html ÆÄÀÏ À̹ǷΠ±¸¼ºÀ» ¸¶À½´ë·Î ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

 

´Ù¿î·Îµå