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();"> ¸¦ ¼±ÅÃÇÏ¿© ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏ¸é µË´Ï´Ù.</font></p>
<p align="center"> </p> </body>
</html>
|
Internet Explore¸¦ ½ÇÇàÇÏ¿© ±× À§Ä¡¸¦ ÀÔ·ÂÇÑ´Ù.
Html ÆÄÀÏ À̹ǷΠ±¸¼ºÀ» ¸¶À½´ë·Î ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
´Ù¿î·Îµå