<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title type="text">myifu.com - Study</title>
      <updated>2010-08-01T09:51:31+09:00</updated>
   <id>http://www.myifu.com/?mid=study&amp;act=atom</id>
   <link rel="alternate" type="text/html" hreflang="ko" href="http://www.myifu.com/study"/>
   <link rel="self" type="application/atom+xml" href="http://www.myifu.com/?mid=study&amp;act=atom"/>
   <generator uri="http://www.xpressengine.com/" version="1.4.2.1">XpressEngine</generator>
   <entry>
      <title>jQuery 기본</title>
      <id>http://www.myifu.com/4361</id>
      <published>2010-06-01T15:18:19+09:00</published>
      <updated>2010-06-04T01:38:07+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/4361"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/4361#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;a href=&quot;http://jquery.com/&quot;&gt;http://jquery.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 사이트에서 최신의 jquery를 다운받습니다. &lt;/p&gt;
&lt;p&gt;min파일을 script태그로 링크한 다음에 사용합니다. &lt;/p&gt;
&lt;pre class=&quot;brush: jscript;&quot;&gt; &amp;lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
 $(document).ready(function(){
  $(&quot;a&quot;).click(function(event){
   alert(&quot;test!!&quot;); 
   event.preventDefault(); // 이벤트의 기본 액션을 막는다. 
  });
 });
&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;phototype 등의 다른 라이브러리를 함께 사용할 때,&amp;nbsp; $()가 겹치므로 문제가 된다. &lt;/p&gt;
&lt;p&gt;이것을 해결하기 위해서, 특정 옵션을 주면, jQuery에서는 $()를 사용하지 못하도록 할 수 있다.&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: jscript;&quot;&gt;jQuery.noConflict();
// Do something with jQuery
jQuery(&quot;div p&quot;).hide();
// Do something with another library&apos;s $()
$(&quot;content&quot;).style.display = &apos;none&apos;;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또는,&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: jscript;&quot;&gt; jQuery.noConflict();
(function($) { 
 $(function() {
  // more code using $ as alias to jQuery
 });
})(jQuery);
// other code using $ as an alias to the other library
&lt;/pre&gt;&lt;br  /&gt;또는, 
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: jscript;&quot;&gt; jQuery.noConflict()(function(){
 // code using jQuery
}); 
// other code using $ as an alias to the other library
&lt;/pre&gt;&lt;br  /&gt;또는, 
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: jscript;&quot;&gt;var j = jQuery.noConflict();
// Do something with jQuery
j(&quot;div p&quot;).hide();
// Do something with another library&apos;s $()
$(&quot;content&quot;).style.display = &apos;none&apos;;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또는,&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: jscript;&quot;&gt;// Do something with the new jQuery
dom.query(&quot;div p&quot;).hide();
// Do something with another library&apos;s $()
$(&quot;content&quot;).style.display = &apos;none&apos;;
// Do something with another version of jQuery
jQuery(&quot;div &amp;gt; p&quot;).hide();&lt;/pre&gt;&lt;br  /&gt;이런 방법으로 사용할 수 있다.&amp;nbsp; 
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>VBA에서 오늘 날짜 &amp; 시간 입력하기</title>
      <id>http://www.myifu.com/4181</id>
      <published>2010-03-31T14:06:28+09:00</published>
      <updated>2010-05-09T02:55:03+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/4181"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/4181#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;특정 포맷으로 오늘 날짜 입력하는 방법입니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;brush: vb;&quot;&gt;Range(&quot;G24&quot;).Value = Format(Date, &quot;yyyy-mm-dd&quot;)&lt;/pre&gt;
&lt;p&gt;&lt;br  /&gt;&amp;nbsp;시간은 Date 대신 Time을 씁니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt; Range(&quot;G24&quot;).Value = Format(Time, &quot;hh:nn:ss&quot;)&lt;/pre&gt;
&lt;p&gt;&lt;br  /&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>네트워크 - 로컬 커넥션</title>
      <id>http://www.myifu.com/4086</id>
      <published>2010-02-08T23:51:01+09:00</published>
      <updated>2010-02-09T00:41:52+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/4086"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/4086#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;strong&gt;Local Connection &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1) 서로 다른 브라우저에서 실행되고 있는 실버라이트 애플리케이션의 통신에 사용.&lt;/p&gt;
&lt;p&gt;2) 하나의 브라우저에서 실행되고 있는 실버라이트 애플리케이션의 통신에 사용.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;LocalMessageSender와 LocalMessageReceiver의 두 가지 클래스를 제공합니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LocalMessageSender&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;보낼때 사용. &lt;/p&gt;
&lt;p&gt;ReceiverDomain : 수신할 Receiver가 속한 도메인&lt;/p&gt;
&lt;p&gt;ReceiverName : 수신할 Receiver의 고유 값&lt;/p&gt;
&lt;p&gt;SendAsync() : 메시지를 전달하고자 할 경우 사용.&lt;/p&gt;
&lt;p&gt;SendCompleted : 메시지가 전달된 경우 발생하는 이벤트&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LocalMessageReceiver&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;받을때 사용.&lt;/p&gt;
&lt;p&gt;NameScope : 같은 도메인상의 실버라이트에서 받을 것인지 다른 도메인상의 실버라이트에서 받을 것인지를 의미.&lt;/p&gt;
&lt;p&gt;ReceiverName : LocalMessageReceiver의 이름&lt;/p&gt;
&lt;p&gt;Listen() : 메시지 수신을 위해 사용하는 메서드.&lt;/p&gt;
&lt;p&gt;MessageReceived : 메시지를 수신하면 발생하는 이벤트&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;COLOR: #000000; FONT-SIZE: 14px&quot;&gt;전송 (LocalMessageSender)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainPage.xaml&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;Grid x:Name=&quot;LayoutRoot&quot; Width=&quot;200&quot; HorizontalAlignment=&quot;Center&quot; VerticalAlignment=&quot;Center&quot;&amp;gt;
 &amp;lt;Grid.RowDefinitions&amp;gt;
  &amp;lt;RowDefinition Height=&quot;30&quot; /&amp;gt;
  &amp;lt;RowDefinition Height=&quot;Auto&quot; /&amp;gt;
 &amp;lt;/Grid.RowDefinitions&amp;gt;
 &amp;lt;TextBlock Grid.Row=&quot;0&quot; Text=&quot;전달한 문장을 입력해 주세요&quot; /&amp;gt;
 &amp;lt;TextBox x:Name=&quot;MyTextBox&quot; Grid.Row=&quot;1&quot; /&amp;gt;
&amp;lt;/Grid&amp;gt; &lt;/pre&gt;&lt;br  /&gt;
&lt;p&gt;MainPage.xaml.cs&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Messaging;
namespace LocalMessageSenderTest
{
 public partial class MainPage : UserControl
 {
  private LocalMessageSender localMessageSender;
  public MainPage()
  {
   InitializeComponent();
   
   localMessageSender= new LocalMessageSender(&quot;MyLocalReceiver&quot;);
   MyTextBox.TextChanged += new TextChangedEventHandler(MyTextBox_TextChanged);
  }
  void MyTextBox_TextChanged(object sender, TextChangedEvnetArgs e)
  {
   localMessageSender.SendAsync(MyTextBox.Text);
  }
 }
} &lt;/pre&gt;&lt;br  /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;COLOR: #000000; FONT-SIZE: 14px&quot;&gt;수신 (LocalMessageReceiver)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;해당 솔루션에서 새 프로젝트를 추가합니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainPage.xaml&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;Grid x:Name=&quot;LayoutRoot&quot; Width=&quot;200&quot; HorizontalAlignment=&quot;Center&quot; VerticalAlignment=&quot;Center&quot;&amp;gt;
 &amp;lt;Grid.RowDefinitions&amp;gt;
  &amp;lt;RowDefinition /&amp;gt;
  &amp;lt;RowDefinition /&amp;gt;
 &amp;lt;/Grid.RowDefinitions&amp;gt;
 &amp;lt;TextBlock Grid.Row=&quot;0&quot; Text=&quot;전달받은 문장은 다음과 같습니다&quot; /&amp;gt;
 &amp;lt;TextBlock x:Name=&quot;MyTextblock&quot; Grid.Row=&quot;1&quot; Foreground=&quot;Blue&quot; FontSize=&quot;15&quot; /&amp;gt;
&amp;lt;/Grid&amp;gt; &lt;/pre&gt;&lt;br  /&gt;
&lt;p&gt;MainPage.xaml.cs&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Messaging;
namespace LocalMessageReceiverTest
{
 public partial class MainPage : UserControl
 {
  private LocalMessageReceiver localMessageReceiver;
  public MainPage()
  {
   InitializeComponent();
   localMessageReceiver = new LocalMessageReceiver(&quot;MyLocalReceiver&quot;);
   localMessageReceiver.MessageReceived += new EventHandler&amp;lt;MessageReceivedEventArgs&amp;gt;(localMessageReceiver_MessageReceived);
   localMessageReceiver.Listen();
  }
  void localMessageReceiver_MessageReceived(object sender, MessageReceivedEventArgs e)
  {
   MyTextBlock.Text=e.Message;
  }
 }
} &lt;/pre&gt;&lt;br  /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제, 위 두 프로젝트를 동시에 실행시키기 위해 솔루션 설정을 변경해야 합니다.&lt;/p&gt;
&lt;p&gt;솔루션에서 마우스 오른클릭을 하여 메뉴에서 속성을 클릭합니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;LocalMessageReseiverTest와 LocalMessageSenderTest의 작업을&lt;/p&gt;
&lt;p&gt;&apos;시작&apos;으로 변경하고 확인을 누릅니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://myifu.com/_study/silverlight/template_network_sender/&quot;&gt;http://myifu.com/_study/silverlight/template_network_sender/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://myifu.com/_study/silverlight/template_network_receiver/&quot;&gt;http://myifu.com/_study/silverlight/template_network_receiver/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Sender 브라우저에서 입력한 문자열이 Receiver 브라우저에서 출력되는 것을 확인할 수 있다. &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>네트워크 - 소켓 통신</title>
      <id>http://www.myifu.com/4073</id>
      <published>2010-02-08T23:12:47+09:00</published>
      <updated>2010-02-08T23:50:02+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/4073"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/4073#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;COLOR: #000000; FONT-SIZE: 14px&quot;&gt;실버라이트와 통신하는 소켓 통신 서버 규칙&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;943 포트를 통해 보아 정책 파일을 제공해야 한다.&lt;/p&gt;
&lt;p&gt;4502~4534 사이의 포트를 이용해야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;COLOR: #000000; FONT-SIZE: 14px&quot;&gt;에코 서버 작성하기&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;에코 서버는 클라이언트로부터 문자열을 전송받아 다시 클라이언트에게 전송하는 역할을 합니다.&lt;/p&gt;
&lt;p&gt;에코 서버는 실버라이트가 아닌 닷넷 기반의 콘솔 애플리케이션 위에서 작동하므로 먼저 C#콘솔 애플리케이션 프로젝트를 생성해야 합니다. &lt;/p&gt;
&lt;p&gt;새 프로젝트 - C# / Windows / Console Application 선택합니다. &lt;/p&gt;
&lt;p&gt;이름에 EchoServer를 입력하고 프로젝트가 저장될 Location은 임의로 저장합니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그다음 클래스를 생성하기 위해 위 프로젝트 에서 마우스 오른 클릭을 하여 추가-클래스 를 클릭합니다. &lt;/p&gt;
&lt;p&gt;이름 입력 상자에 EchoServer.cs로 입력한 후 확인을 누릅니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;EchoServer.cs&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
namespace EchoServer
{
 class EchoServer
 {
  public void StartServer()
  {
   Console.WriteLine(&quot;EchoServer를 시작합니다.&quot;);
   // SocketServer 생성
   // 포트 4530
   TcpListener listener = new TcpListener(IPAddress.Any, 4530);
   listener.Start();
   while (true)
   {
    byte[] buffer = new byte[512];
    // 클라이언트 접속 기다림
    Socket clientSocket = listener.AcceptSocket();
    Console.WriteLine(&quot;클라이언트가 접속했습니다.&quot;);
    while (true)
    {
     // 클라이언트로부터 문장 수신
     int receiveLength = 
      clientSocket.Receive(buffer, 512, SocketFlags.None);
     // 클라이언트로 다시 문장 전송
     if (receiveLength &amp;gt; 0)
      clientSocket.Send(buffer, 512, SocketFlags.None);
     else
     {
      clientSocket.Shutdown(SocketShutdown.Both);
      break;
     }
    }
   }
  }
 }
}&lt;/pre&gt;&lt;br  /&gt;
&lt;p&gt;Program.cs&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt; using System;
using System.Collections.Generic;
using System.Text;
namespace EchoServer
{
    class Program
    {
        static void Main(string[] args)
        {
            EchoServer server = new EchoServer();
            server.StartServer();
        }
    }
}&lt;/pre&gt;&lt;br  /&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;COLOR: #000000; FONT-SIZE: 14px&quot;&gt;보안 정책 서버 작성하기&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;실버라이트는 네트워크 통신을 하기 위해서 반드시 보안 정책 파일이 있어야 합니다. &lt;/p&gt;
&lt;p&gt;특히 소켓을 이용하는 실버라이트 클라이언트는 이용하고자 하는 소켓 서버의 943 포트로 보안 정책 파일을 요청합니다. 943 포트를 이용해 보안 정채 서버를 작동시키기 위해 위&amp;nbsp;서버 프로젝트에 하나의 프로젝트를 더 추가하도록 하겠습니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;새 프로젝트 - Windows - 콘솔 Application&amp;nbsp;선택&lt;/p&gt;
&lt;p&gt;이름 입력상자에 PolicyServer라고 입력하고 Location을 임의로 지정합니다.&lt;/p&gt;
&lt;p&gt;그리고 중요한 부분으로 Solution은 Add to Solution을 선택해 현재 솔루션에 프로젝트가 추가할 수 있도록 지정합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음으로 보안 파일을 생성합니다. &lt;/p&gt;
&lt;p&gt;PsolicyServer 프로젝트위에서 마우스 오른쪽 버튼을 클릭해서&amp;nbsp; 추가-새 항목 추가를 클릭합니다. &lt;/p&gt;
&lt;p&gt;나타나는 대화창에서 XML File을 선택하고, 이름을 clientaccesspolicy.xml로 입력합니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;clientaccesspolicy.xml&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;access-policy&amp;gt;
  &amp;lt;cross-domain-access&amp;gt;
 &amp;lt;policy&amp;gt;
   &amp;lt;allow-from&amp;gt;
  &amp;lt;domain uri=&quot;*&quot; /&amp;gt;
   &amp;lt;/allow-from&amp;gt;
   &amp;lt;grant-to&amp;gt;
  &amp;lt;socket-resource port=&quot;4530&quot; protocol=&quot;tcp&quot; /&amp;gt;
   &amp;lt;/grant-to&amp;gt;
 &amp;lt;/policy&amp;gt;
  &amp;lt;/cross-domain-access&amp;gt;
&amp;lt;/access-policy&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;* 다수의 포트를 사용할 때에는 4530-4532와 같이&amp;nbsp;범위로 입력할&amp;nbsp;수 있습니다. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음으로 PolicyServer 클래스를 생성합니다. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;(추가-클래스 - 이름을 PolicyServer로 입력)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;PolicyServer.cs&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;
namespace PolicyServer
{
 class PolicyServer
 {
  private string policyRequestString = &quot;&amp;lt;policy-file-request/&amp;gt;&quot;;
  private string policyFilePath = @&quot;..\..\clientaccesspolicy.xml&quot;;
  private byte[] policy;
  public void StartServer()
  {
   Console.WriteLine(&quot;PolicyServer를 시작합니다.&quot;);
   // Policy 파일의 내용을 읽습니다.
   FileStream policyStream = new FileStream(policyFilePath, FileMode.Open);
   policy = new byte[policyStream.Length];
   policyStream.Read(policy, 0, policy.Length);
   policyStream.Close();
   // SocketServer 생성
   // 포트 943
   TcpListener listener = new TcpListener(IPAddress.Any, 943);
   listener.Start();
   while (true)
   {
    byte[] buffer = new byte[512];
    // 클라이언트 접속 기다림
    Socket clientSocket = listener.AcceptSocket();
    Console.WriteLine(&quot;클라이언트가 접속했습니다.&quot;);
    // 클라이언트로부터 문장 수신
    int receiveLength = clientSocket.Receive(buffer, 512, SocketFlags.None);
    if (receiveLength &amp;gt; 0)
    {
     string receiveString = System.Text.Encoding.UTF8.GetString(buffer, 0, receiveLength);
     // 클라이언트로부터 받은 문장이
     // &amp;lt;policy-file-request/&amp;gt;라면
     // 클라이언트에게 보안 정책 파일 전송
     if (receiveString.Equals(policyRequestString)) clientSocket.Send(policy, 0, policy.Length, SocketFlags.None);
    }
    // 클라이언트와 연결 종료
    clientSocket.Close();
   }
  }
 }
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;마지막으로 PolicyServer를 작동하기 위해 Program.cs를 열어 아래와 같이 입력합니다.&lt;/p&gt;
&lt;p&gt;Program.cs&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;using System;
using System.Collections.Generic;
using System.Text;
namespace PolicyServer
{
 class Program
 {
  static void Main(string[] args)
  {
   PolicyServer server = new PolicyServer();
   server.StartServer();
  }
 }
}&lt;/pre&gt;&lt;br  /&gt;&amp;nbsp; 
&lt;p&gt;마지막으로 EchoServer와 PolicyServer를 동시에 시작하게 하기 위해서,&lt;/p&gt;
&lt;p&gt;솔루션에서 오른클릭하여 Properties를 클릭합니다. &lt;/p&gt;
&lt;p&gt;대화창에서 EchoServer와 PolicyServer의 Action을 Start 로 변경합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;COLOR: #000000; FONT-SIZE: 14px&quot;&gt;에코 클라이언트 작성하기&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Echoclient라는 이름의 실버라이트 프로젝트를 생성하고, 다음과 같이 코드를 입력합니다. &lt;br  /&gt;Main.xaml&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;Grid x:Name=&quot;LayoutRoot&quot;&amp;gt;
 &amp;lt;Grid.RowDefinitions&amp;gt;
  &amp;lt;RowDefinition/&amp;gt;
  &amp;lt;RowDefinition/&amp;gt;
 &amp;lt;/Grid.RowDefinitions&amp;gt;
 &amp;lt;Grid.ColumnDefinitions&amp;gt;
  &amp;lt;ColumnDefinition/&amp;gt;
  &amp;lt;ColumnDefinition/&amp;gt;
 &amp;lt;/Grid.ColumnDefinitions&amp;gt;
 &amp;lt;TextBox x:Name=&quot;tbSendString&quot; Grid.Row=&quot;0&quot; Grid.Column=&quot;0&quot;/&amp;gt;
 &amp;lt;Button x:Name=&quot;btSend&quot; Content=&quot;전송&quot; Grid.Row=&quot;1&quot; Grid.Column=&quot;0&quot;/&amp;gt;
 &amp;lt;TextBlock x:Name=&quot;tbReceiveString&quot; Grid.Row=&quot;0&quot; Grid.Column=&quot;1&quot;/&amp;gt;
&amp;lt;/Grid&amp;gt; &lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainPage.xaml.cs&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Net.Sockets;
namespace EchoClient
{
 public partial class MainPage : UserControl
 {
  Socket socket;
  public MainPage()
  {
   InitializeComponent();
   Loaded += new RoutedEventHandler(MainPage_Loaded);
   btSend.Click += new RoutedEventHandler(btSend_Click);
  }
  void btSend_Click(object sender, RoutedEventArgs e)
  {
   SocketAsyncEventArgs args = new SocketAsyncEventArgs();
   args.Completed += new EventHandler&amp;lt;SocketAsyncEventArgs&amp;gt;(SocketCompleted);
   byte[] response = System.Text.Encoding.UTF8.GetBytes(tbSendString.Text);
   args.SetBuffer(response, 0, response.Length);
   socket.SendAsync(args);
  }
  void MainPage_Loaded(object sender, RoutedEventArgs e)
  {
   DnsEndPoint endPoint = new DnsEndPoint(&quot;127.0.0.1&quot;, 4530);
   socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
   SocketAsyncEventArgs args = new SocketAsyncEventArgs();
   args.RemoteEndPoint = endPoint;
   args.Completed += new EventHandler&amp;lt;SocketAsyncEventArgs&amp;gt;(SocketCompleted);
   socket.ConnectAsync(args);
  }
  void SocketCompleted(object sender, SocketAsyncEventArgs e)
  {
   // 서버에 접속한 경우
   if (e.LastOperation == SocketAsyncOperation.Connect)
   {
    if (e.SocketError != SocketError.Success)
    {
     Dispatcher.BeginInvoke(() =&amp;gt; MessageBox.Show(&quot;서버에 접속할 수 없습니다.&quot;));
     return;
    }
   }
   else if (e.LastOperation == SocketAsyncOperation.Send)
   {
    SocketAsyncEventArgs args = new SocketAsyncEventArgs();
    args.Completed += new EventHandler&amp;lt;SocketAsyncEventArgs&amp;gt;(SocketCompleted);
    byte[] response = new byte[512];
    args.SetBuffer(response, 0, response.Length);
    socket.ReceiveAsync(args);
   }
   else if (e.LastOperation == SocketAsyncOperation.Receive)
   {
    string receiveString = System.Text.Encoding.UTF8.GetString(e.Buffer, 0, e.Buffer.Length);
    Dispatcher.BeginInvoke(() =&amp;gt; tbReceiveString.Text = receiveString);
   }
  }
 }
} &lt;/pre&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>네트워크 - HTTP / WCF 서비스</title>
      <id>http://www.myifu.com/4059</id>
      <published>2010-02-08T22:23:57+09:00</published>
      <updated>2010-02-09T01:40:44+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/4059"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/4059#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;strong&gt;WCF (Windows Communication Foundation) &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;WCF는 SOA (Service Oriented Architecture)를 구축할 수 있는 닷넷 프레임워크의 중요한 요소입니다. &lt;/p&gt;
&lt;p&gt;서버와 클라이언트 간의 통신을 매우 쉽게 할 수 있습니다. &lt;/p&gt;
&lt;p&gt;서버에서는 WCF를 이용해 서비스를 제공하고, 클라이언트에서는 프록시(Proxy, 대리인)코드를 이용해 서버에서 제공하는 서비스를 이용하는 아키텍쳐를 가지고 있습니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;* 프록시코드&lt;/p&gt;
&lt;p&gt;WCF는 서버와 클라이언트간의 통신을 위해 SOAP(Simple Object Access Protocol, XML기반)을 이용합니다. 그러면 프로그래머는 서버의 서비스를 이용하기 위해 XML을 파싱하는 귀찮은 작업을 해야 합니다.&lt;/p&gt;
&lt;p&gt;이러한 작업을 피하기 위해 비주얼 스튜디오에서는 프로그래머 대신 XML을 파싱하는 코드(클래스)를 자동으로 생성하는 기능을 가지고 있습니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #b3b3b3&quot;&gt;어떤 객체의 메서드를 호출 한다고 했을 때, &lt;/span&gt;&lt;span style=&quot;COLOR: #b3b3b3&quot;&gt;프록시가 그 객체인 것처럼 그 호출을 받으므로, &lt;/span&gt;&lt;span style=&quot;COLOR: #6d6d6d&quot;&gt;&lt;span style=&quot;COLOR: #b3b3b3&quot;&gt;필요한 전처리를 실행할 수도 있고, 실제 메서드를 호출하거나 호출하지 않고도 결과를 반환할 수도 있습니다.&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WCF 서비스 구축하기&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;프로젝트의 Web부분에서 추가-새 항목 - 웹서비스를 클릭하여 선택 한 후,&amp;nbsp; &lt;/p&gt;
&lt;p&gt;이름에 Test.asmx를 입력합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Test.asmx&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;%@ WebService Language=&quot;C#&quot; CodeBehind=&quot;Test.asmx.cs&quot; Class=&quot;WCFTest.Web.Test&quot; %&amp;gt; &lt;/pre&gt;&lt;br  /&gt;&amp;nbsp; 
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Test.asmx.cs&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;namespace WCFTest.Web
{
 [WebService(Namespace = &quot;http://tempuri.org/&quot;)]
 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
 [System.ComponentModel.ToolboxItem(false)]
 public class Test : System.Web.Services.WebService
 {
  [WebMethod]
  public string HelloWorld()
  {
   return &quot;Hello World&quot;;
  }
  [WebMethod]
  public int Add(int num1, int num2)
  {
   return num1 + num2;
  }
 }
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;프록시 코드 생성하기&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;실버라이트 프로젝트에서 마우스 오른클릭해서 서비스 참조 추가 클릭합니다. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://localhost:포트/Test.asmx&quot;&gt;http://localhost:포트/Test.asmx&lt;/a&gt; 입력&amp;nbsp;/ 혹은 &lt;br  /&gt;검색을 클릭하면 현재 등록된 웹서비스의 주소를 자동으로 입력합니다. &lt;/p&gt;
&lt;p&gt;그리고 확인 버튼을 클릭하면 프록시 코드 생성을 시작합니다. &lt;/p&gt;
&lt;p&gt;완료되면 ServiceReference1이 추가됩니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;실버라이트에서 웹 서비스 이용하기&lt;br  /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;MainPage.xaml 
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;StackPanel Orientation=&quot;Horizontal&quot; VerticalAlignment=&quot;Center&quot; HorizontalAlignment=&quot;Center&quot;&amp;gt;
 &amp;lt;TextBox x:Name=&quot;tbNum1&quot; FontSize=&quot;20&quot;/&amp;gt;
 &amp;lt;TextBlock Text=&quot; + &quot; FontSize=&quot;20&quot;/&amp;gt;
 &amp;lt;TextBox x:Name=&quot;tbNum2&quot; FontSize=&quot;20&quot;/&amp;gt;
 &amp;lt;TextBlock Text=&quot; = &quot; FontSize=&quot;20&quot;/&amp;gt;
 &amp;lt;TextBlock x:Name=&quot;tbResult&quot; FontSize=&quot;20&quot;/&amp;gt;
 &amp;lt;Button x:Name=&quot;btCalculate&quot; Content=&quot;계산하기&quot; Margin=&quot;20, 0, 0, 0&quot; Height=&quot;23&quot;/&amp;gt;
&amp;lt;/StackPanel&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;br  /&gt;MainPage.xaml.cs&amp;nbsp; &lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using WCFTest.ServiceReference1;
namespace WCFTest
{
 public partial class MainPage : UserControl
 {
  public MainPage()
  {
   InitializeComponent();
   // Client 이벤트 핸들러 설치
   btCalculate.Click += 
    new RoutedEventHandler(Calculate);
  }
  void Calculate(object sender, RoutedEventArgs e)
  {
   // 계산할 수를 가져옴
   int num1 = Convert.ToInt32(tbNum1.Text);
   int num2 = Convert.ToInt32(tbNum2.Text);
   // 웹서비스 호출을 위한 Client 생성
   // 프록시 코드에서 자동 생성된 클래스
   TestSoapClient client = new TestSoapClient();
   // ASync로 작동하기 때문에 AddCompleted 이벤트 핸들러 설치
   client.AddCompleted += new EventHandler&amp;lt;AddCompletedEventArgs&amp;gt;(AddCompleted);
   // Add 서비스 호출
   client.AddAsync(num1, num2);
  }
  void AddCompleted(object sender, AddCompletedEventArgs e)
  {
   // Add 결과 받음
   int result = e.Result;
   // 화면에 반영
   tbResult.Text = result.ToString();
  }
 }
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;웹서비스에서의 보안정책&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;WebClient와 동일하게 보안 정책 파일이 필요&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>네트워크 - HTTP / WebClient</title>
      <id>http://www.myifu.com/4045</id>
      <published>2010-02-08T21:17:15+09:00</published>
      <updated>2010-02-09T00:46:33+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/4045"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/4045#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;&lt;strong&gt;&lt;span style=&quot;COLOR: #000000&quot;&gt;WebClient &lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;WebClient 는 HTTP를 이용해서 외부 리소스나 문자열을 다운로드/업로드 할 때 사용하는 클래스입니다.&lt;/p&gt;
&lt;p&gt;HttpWebRequest&amp;nbsp;/ HttpWebResponse에 비해 단순한 기능만 제공하므로, 쉽습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Async : asynchronous communication, 비동기통신&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WebClient에서 제공되는 메서드&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DownloadStringAsync / Get / 문자열 타입 / 문자열을 다운로드&lt;/p&gt;
&lt;p&gt;UploadStringAsync / Post / 문자열 타입 / 문자열을 업로드&lt;/p&gt;
&lt;p&gt;OpenReadAsync / Get / 리소스 타입&amp;nbsp;/ 리소스를 다운로드&lt;/p&gt;
&lt;p&gt;OpenWriteAsync / Post / 리소스&amp;nbsp;타입 / 리소스를 업로드&lt;/p&gt;
&lt;p&gt;CancelAsync / 업로드나 다운로드를 취소합니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;* 문자열 타입은 일반 Text나 HTML, XML등을 의미하고,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; 리소스 타입은 이미지나 동영상을 등을 의미합니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WebCliend에서 제공되는 이벤트&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DownloadStringCompleted&amp;nbsp;/ 문자열 다운로드가 완료 혹은 실패한 경우&lt;br  /&gt;DownloadProgressChanged&amp;nbsp;/ 문자열 다운로드 양이 변화된 경우&lt;br  /&gt;UploadStringCompleted / 문자열 업로드가 완료 혹은 실패한 경우&lt;br  /&gt;UploadProgressChanged / 문자열 업로드 양이 변화된 경우&lt;/p&gt;
&lt;p&gt;OpenReadCompleted / 리소스를 다운받기 위한 스트림이 열린 경우&lt;/p&gt;
&lt;p&gt;OpenWriteCompleted / 리소스를 업로드 하기 위한 스트림이 열린 경우&lt;/p&gt;
&lt;p&gt;WriteStreamClosed / 리소스를 업로드 하기 위한 스트림이 닫힌 경우&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WebClient 이용해서 문자열 다운로드 하기&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;MainPage.xaml 
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;Grid x:Name=&quot;LayoutRoot&quot; &amp;gt;
 &amp;lt;Grid.RowDefinitions&amp;gt;
  &amp;lt;RowDefinition Height=&quot;Auto&quot;/&amp;gt;
  &amp;lt;RowDefinition Height=&quot;Auto&quot;/&amp;gt;
  &amp;lt;RowDefinition Height=&quot;Auto&quot;/&amp;gt;
 &amp;lt;/Grid.RowDefinitions&amp;gt;
 &amp;lt;Grid.ColumnDefinitions&amp;gt;
  &amp;lt;ColumnDefinition Width=&quot;Auto&quot;/&amp;gt;
 &amp;lt;/Grid.ColumnDefinitions&amp;gt;
 &amp;lt;TextBlock Text=&quot;다운로드 결과&quot;/&amp;gt;
 &amp;lt;Border Grid.Row=&quot;1&quot; BorderBrush=&quot;Black&quot; BorderThickness=&quot;1&quot;&amp;gt;
  &amp;lt;TextBlock x:Name=&quot;tbResult&quot; Width=&quot;400&quot; Height=&quot;300&quot; /&amp;gt;
 &amp;lt;/Border&amp;gt;
 &amp;lt;Button x:Name=&quot;btRequest&quot; Width=&quot;Auto&quot; Height=&quot;Auto&quot; Content=&quot;다운로드&quot; Grid.Row=&quot;2&quot; /&amp;gt;
&amp;lt;/Grid&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainPage.xaml.cs&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;public partial class MainPage : UserControl 
{
 public MainPage()
 {
  InitializeComponent();
  btRequest.Click += new RoutedEventHandler(btRequest_Click);
 }
 void btRequest_Click(object sender, RoutedEventArgs e)
 {
  WebClient client = new WebClient();
  client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
  client.DownloadStringAsync(
   new Uri(&quot;http://antasis9.woweb.net/silverlight/hello.txt&quot;, UriKind.Absolute)
  );
 }
 void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
 {
  tbResult.Text = e.Result.ToString();
 }
} &lt;/pre&gt;&lt;br  /&gt;
&lt;p&gt;&lt;strong&gt;WebClient 이용해서&amp;nbsp;리소스 다운로드 하기&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;MainPage.xaml&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;Grid x:Name=&quot;LayoutRoot&quot;&amp;gt;
 &amp;lt;Grid.RowDefinitions&amp;gt;
  &amp;lt;RowDefinition Height=&quot;100&quot;/&amp;gt;
  &amp;lt;RowDefinition Height=&quot;30&quot;/&amp;gt;
 &amp;lt;/Grid.RowDefinitions&amp;gt;
 &amp;lt;StackPanel Grid.Row=&quot;0&quot; 
    VerticalAlignment=&quot;Center&quot; HorizontalAlignment=&quot;Center&quot; 
    Orientation=&quot;Horizontal&quot;&amp;gt;
  &amp;lt;TextBlock Text=&quot;다운로드양: &quot; FontSize=&quot;20&quot; FontWeight=&quot;Bold&quot;/&amp;gt;
  &amp;lt;TextBlock x:Name=&quot;tbDownloadPercent&quot; Text=&quot;0&quot; FontSize=&quot;20&quot; FontWeight=&quot;Bold&quot;/&amp;gt;
  &amp;lt;TextBlock Text=&quot;%&quot; FontSize=&quot;20&quot; FontWeight=&quot;Bold&quot;/&amp;gt;
 &amp;lt;/StackPanel&amp;gt;
 &amp;lt;Button x:Name=&quot;btRequest&quot;
    Width=&quot;100&quot; Height=&quot;30&quot; Content=&quot;다운로드&quot; Grid.Row=&quot;1&quot;/&amp;gt;
&amp;lt;/Grid&amp;gt;&lt;/pre&gt;&lt;br  /&gt;MainPage.xaml.cs 
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;public partial class MainPage : UserControl
{
 public MainPage()
 {
  InitializeComponent();
  btRequest.Click += new RoutedEventHandler(btRequest_Click);
 }
 void btRequest_Click(object sender, RoutedEventArgs e)
 {
  WebClient client = new WebClient();
  // 다운로드 양이 변경되면 호출되는 이벤트의 핸들러
  client.DownloadProgressChanged +=
   new DownloadProgressChangedEventHandler(DownloadProgressChanged);
  // 다운로드 준비가 되면 호출되는 이벤트의 핸들러
  client.OpenReadCompleted += 
   new OpenReadCompletedEventHandler(OpenReadCompleted);
  // 다운로드 시작
  client.OpenReadAsync
   (new Uri(&quot;http://antasis9.woweb.net/silverlight/SilverlightApplication3.xap&quot;, 
    UriKind.Absolute));
 }
 void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
 {
  // 다운로드 양이 변경되면 화면에 출력
  tbDownloadPercent.Text = e.ProgressPercentage.ToString();
 }
 void OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
 {
  byte[] buffer = new byte[1024];
  // 격리된 저장 공간에 파일 생성
  IsolatedStorageFile store = 
   IsolatedStorageFile.GetUserStoreForApplication();
  StreamWriter sw = 
   new StreamWriter(store.OpenFile(&quot;test.zip&quot;, FileMode.Create));
  // 네트워크에서 1024 바이트씩 읽어옴
  while (e.Result.Read(buffer, 0, 1024) != 0)
  {
   // 파일에 기록
   sw.Write(buffer);
  }  
  sw.Close();
 }
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;* Silverlight는 다른 하위 도메인, 다른 프로토콜, 다른 호스트, 다른 포트에 대해 보안 에러를 발생시킵니다. &lt;/p&gt;
&lt;p&gt;오직 같은 도메인, 같은 프로토콜, 같은 포트에 대해서만 접근이 가능합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이것을 해결하기 위해서는 외부 서버에서 미리 허가를 받아야 합니다.&lt;/p&gt;
&lt;p&gt;접속하고자 하는 서버의 관리자는 실버라이트에서 쓰이는 특정 보안 정책 파일을 해당 도메인에 넣어 줍니다. &lt;/p&gt;
&lt;p&gt;그러면 실버라이트 애플리케이션은 미리 약속된 도메인임을 알아채고 보안 문제에 걸리지 않고 서비스를 계속해서 수핼 할&amp;nbsp; 수 있게 됩니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1) 실버라이트 도메인 정책 파일&amp;nbsp;(clientaccesspolicy.xml)&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&amp;gt;
&amp;lt;access-policy&amp;gt;
 &amp;lt;cross-domain-access&amp;gt;
  &amp;lt;policy&amp;gt;
   &amp;lt;allow-from http-request-headers=&quot;*&quot;&amp;gt;
    &amp;lt;domain uri=&quot;*&quot; /&amp;gt;
   &amp;lt;allow-from&amp;gt;
   &amp;lt;grant-to&amp;gt;
    &amp;lt;resource path=&quot;/&quot; include-subpaths=&quot;true&quot; /&amp;gt;
   &amp;lt;/grant-to&amp;gt;
  &amp;lt;/policy&amp;gt;
 &amp;lt;/cross-domain-access&amp;gt;
&amp;lt;/access-policy&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) 플래시 도메인 정책 파일&lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; ?&amp;gt;
&amp;lt;!DOCTYPE cross-domain-policy SYSTEM &quot;http://www.macromedia.com/xml.dtds/cross-domain-policy.dtd&quot;&amp;gt;
&amp;lt;cross-domain-policy&amp;gt;
 &amp;lt;allow-access-from domain=&quot;*&quot; headers=&quot;*&quot; secure=&quot;true&quot; /&amp;gt;
&amp;lt;/cross-domain-policy&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Animation - 4*) ObjectAnimationUsingKeyFrames</title>
      <id>http://www.myifu.com/4027</id>
      <published>2010-02-03T22:36:10+09:00</published>
      <updated>2010-02-03T22:37:29+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/4027"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/4027#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;Canvas x:Name=&quot;LayoutRoot&quot;&amp;gt;
 &amp;lt;Canvas.Resources&amp;gt;
  &amp;lt;Storyboard x:Name=&quot;MyStoryboard&quot;&amp;gt;
   &amp;lt;ObjectAnimationUsingKeyFrames Storyboard.TargetName=&quot;rect&quot; Storyboard.TargetProperty=&quot;Visibility&quot;&amp;gt;
    &amp;lt;DiscreteObjectKeyFrame KeyTime=&quot;00:00:01&quot; Value=&quot;Collapsed&quot; /&amp;gt;
    &amp;lt;DiscreteObjectKeyFrame KeyTime=&quot;00:00:02&quot; Value=&quot;Visible&quot; /&amp;gt;
    &amp;lt;DiscreteObjectKeyFrame KeyTime=&quot;00:00:03&quot; Value=&quot;Collapsed&quot; /&amp;gt;
   &amp;lt;/ObjectAnimationUsingKeyFrames&amp;gt;
  &amp;lt;/Storyboard&amp;gt;
 &amp;lt;/Canvas.Resources&amp;gt;
 &amp;lt;Rectangle x:Name=&quot;rect&quot; Width=&quot;100&quot; Height=&quot;100&quot; Canvas.Left=&quot;0&quot; Canvas.Top=&quot;0&quot;&amp;gt;
  &amp;lt;Rectangle.Fill&amp;gt;
   &amp;lt;SolidColorBrush Color=&quot;Red&quot; /&amp;gt;
  &amp;lt;/Rectangle.Fill&amp;gt;
 &amp;lt;/Rectangle&amp;gt;
&amp;lt;/Canvas&amp;gt;&lt;/pre&gt;&lt;br  /&gt;View : &lt;a href=&quot;http://myifu.com/_study/silverlight/template_animation_13_objectanimation/&quot;&gt;http://myifu.com/_study/silverlight/template_animation_13_objectanimation/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Animation - 4-d) Discrete{Type}KeyFrame</title>
      <id>http://www.myifu.com/4019</id>
      <published>2010-02-03T21:23:57+09:00</published>
      <updated>2010-02-03T22:03:28+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/4019"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/4019#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;Canvas x:Name=&quot;LayoutRoot&quot;&amp;gt;
 &amp;lt;Canvas.Resources&amp;gt;
  &amp;lt;Storyboard x:Name=&quot;MyStoryboard&quot;&amp;gt;
   &amp;lt;DoubleAnimationUsingKeyFrames Storyboard.TargetName=&quot;rect&quot; Storyboard.TargetProperty=&quot;Width&quot;&amp;gt;
    &amp;lt;DiscreteDoubleKeyFrame KeyTime=&quot;00:00:01&quot; Value=&quot;200&quot; /&amp;gt;
    &amp;lt;DiscreteDoubleKeyFrame KeyTime=&quot;00:00:02&quot; Value=&quot;300&quot; /&amp;gt;
    &amp;lt;DiscreteDoubleKeyFrame KeyTime=&quot;00:00:03&quot; Value=&quot;400&quot; /&amp;gt;
   &amp;lt;/DoubleAnimationUsingKeyFrames&amp;gt;
  &amp;lt;/Storyboard&amp;gt;
 &amp;lt;/Canvas.Resources&amp;gt;
 &amp;lt;Rectangle x:Name=&quot;rect&quot; Width=&quot;100&quot; Height=&quot;100&quot; Canvas.Left=&quot;0&quot; Canvas.Top=&quot;0&quot;&amp;gt;
  &amp;lt;Rectangle.Fill&amp;gt;
   &amp;lt;SolidColorBrush Color=&quot;Red&quot; /&amp;gt;
  &amp;lt;/Rectangle.Fill&amp;gt;
 &amp;lt;/Rectangle&amp;gt;
&amp;lt;/Canvas&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;br  /&gt;View : &lt;a href=&quot;http://myifu.com/_study/silverlight/template_animation_12_usingkeyframe04/&quot;&gt;http://myifu.com/_study/silverlight/template_animation_12_usingkeyframe04/&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Animation - 4-c) Easing{Type}KeyFrame</title>
      <id>http://www.myifu.com/4016</id>
      <published>2010-02-03T21:23:16+09:00</published>
      <updated>2010-02-03T22:00:08+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/4016"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/4016#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;Canvas x:Name=&quot;LayoutRoot&quot;&amp;gt;
 &amp;lt;Canvas.Resources&amp;gt;
  &amp;lt;Storyboard x:Name=&quot;MyStoryboard&quot;&amp;gt;
   &amp;lt;DoubleAnimationUsingKeyFrames Storyboard.TargetName=&quot;rect&quot; Storyboard.TargetProperty=&quot;Width&quot;&amp;gt;
    &amp;lt;EasingDoubleKeyFrame KeyTime=&quot;00:00:01&quot; Value=&quot;200&quot;&amp;gt;
     &amp;lt;EasingDoubleKeyFrame.EasingFunction&amp;gt;
      &amp;lt;SineEase /&amp;gt;
     &amp;lt;/EasingDoubleKeyFrame.EasingFunction&amp;gt;
    &amp;lt;/EasingDoubleKeyFrame&amp;gt;
    &amp;lt;EasingDoubleKeyFrame KeyTime=&quot;00:00:05&quot; Value=&quot;300&quot;&amp;gt;
     &amp;lt;EasingDoubleKeyFrame.EasingFunction&amp;gt;
      &amp;lt;ElasticEase /&amp;gt;
     &amp;lt;/EasingDoubleKeyFrame.EasingFunction&amp;gt;
    &amp;lt;/EasingDoubleKeyFrame&amp;gt;
   &amp;lt;/DoubleAnimationUsingKeyFrames&amp;gt;
  &amp;lt;/Storyboard&amp;gt;
 &amp;lt;/Canvas.Resources&amp;gt;
 &amp;lt;Rectangle x:Name=&quot;rect&quot; Width=&quot;100&quot; Height=&quot;100&quot; Canvas.Left=&quot;0&quot; Canvas.Top=&quot;0&quot;&amp;gt;
  &amp;lt;Rectangle.Fill&amp;gt;
   &amp;lt;SolidColorBrush Color=&quot;Red&quot; /&amp;gt;
  &amp;lt;/Rectangle.Fill&amp;gt;
 &amp;lt;/Rectangle&amp;gt;
&amp;lt;/Canvas&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;br  /&gt;View : &lt;a href=&quot;http://myifu.com/_study/silverlight/template_animation_12_usingkeyframe03/&quot;&gt;http://myifu.com/_study/silverlight/template_animation_12_usingkeyframe03/&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Animation - 4-b) Spline{Type}KeyFrame</title>
      <id>http://www.myifu.com/4013</id>
      <published>2010-02-03T21:22:20+09:00</published>
      <updated>2010-02-03T21:56:20+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/4013"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/4013#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;Canvas x:Name=&quot;LayoutRoot&quot;&amp;gt;
 &amp;lt;Canvas.Resources&amp;gt;
  &amp;lt;Storyboard x:Name=&quot;MyStoryboard&quot;&amp;gt;
   &amp;lt;DoubleAnimationUsingKeyFrames Storyboard.TargetName=&quot;rect&quot; Storyboard.TargetProperty=&quot;Width&quot;&amp;gt;
    &amp;lt;SplineDoubleKeyFrame KeyTime=&quot;00:00:01&quot; Value=&quot;200&quot; KeySpline=&quot;1.0,0.0,1.0,1.0&quot; /&amp;gt;
    &amp;lt;SplineDoubleKeyFrame KeyTime=&quot;00:00:05&quot; Value=&quot;300&quot; KeySpline=&quot;0.0,1.0,1.0,1.0&quot; /&amp;gt;
   &amp;lt;/DoubleAnimationUsingKeyFrames&amp;gt;
  &amp;lt;/Storyboard&amp;gt;
 &amp;lt;/Canvas.Resources&amp;gt;
 &amp;lt;Rectangle x:Name=&quot;rect&quot; Width=&quot;100&quot; Height=&quot;100&quot; Canvas.Left=&quot;0&quot; Canvas.Top=&quot;0&quot;&amp;gt;
  &amp;lt;Rectangle.Fill&amp;gt;
   &amp;lt;SolidColorBrush Color=&quot;Red&quot; /&amp;gt;
  &amp;lt;/Rectangle.Fill&amp;gt;
 &amp;lt;/Rectangle&amp;gt;
&amp;lt;/Canvas&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;br  /&gt;View : &lt;a href=&quot;http://myifu.com/_study/silverlight/template_animation_12_usingkeyframe02/&quot;&gt;http://myifu.com/_study/silverlight/template_animation_12_usingkeyframe02/&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Animation - 4-a) Linear{Type}KeyFrame</title>
      <id>http://www.myifu.com/4010</id>
      <published>2010-02-03T21:21:44+09:00</published>
      <updated>2010-02-03T21:52:01+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/4010"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/4010#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;Canvas x:Name=&quot;LayoutRoot&quot;&amp;gt;
 &amp;lt;Canvas.Resources&amp;gt;
  &amp;lt;Storyboard x:Name=&quot;MyStoryboard&quot;&amp;gt;
   &amp;lt;DoubleAnimationUsingKeyFrames Storyboard.TargetName=&quot;rect&quot; Storyboard.TargetProperty=&quot;Width&quot;&amp;gt;
    &amp;lt;EasingDoubleKeyFrame KeyTime=&quot;00:00:01&quot; Value=&quot;200&quot; /&amp;gt;
    &amp;lt;LinearDoubleKeyFrame KeyTime=&quot;00:00:05&quot; Value=&quot;300&quot; /&amp;gt;
   &amp;lt;/DoubleAnimationUsingKeyFrames&amp;gt;
  &amp;lt;/Storyboard&amp;gt;
 &amp;lt;/Canvas.Resources&amp;gt;
 &amp;lt;Rectangle x:Name=&quot;rect&quot; Width=&quot;100&quot; Height=&quot;100&quot; Canvas.Left=&quot;0&quot; Canvas.Top=&quot;0&quot;&amp;gt;
  &amp;lt;Rectangle.Fill&amp;gt;
   &amp;lt;SolidColorBrush Color=&quot;Red&quot; /&amp;gt;
  &amp;lt;/Rectangle.Fill&amp;gt;
 &amp;lt;/Rectangle&amp;gt;
&amp;lt;/Canvas&amp;gt;&lt;/pre&gt;&lt;br  /&gt;View : &lt;a href=&quot;http://myifu.com/_study/silverlight/template_animation_12_usingkeyframe01/&quot;&gt;http://myifu.com/_study/silverlight/template_animation_12_usingkeyframe01/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Animation - 4) Key Frame Animation</title>
      <id>http://www.myifu.com/3988</id>
      <published>2010-02-03T17:59:54+09:00</published>
      <updated>2010-02-03T22:41:56+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/3988"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/3988#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;첫 프레임(From)과 마지막 프레임(To) 뿐만 아니라 중간에도 프레임을 상세하게 제어하기 위해 사용.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;종류 : {변화시키는 Type}AnimationUsingKeyFrames&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;DoubleAnimationUsingKeyFrames&lt;/p&gt;
&lt;p&gt;PointAnimationUsingKeyFrames&lt;/p&gt;
&lt;p&gt;ColorAnimationUsingKeyFrames&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;self&quot; href=&quot;http://www.myifu.com/study/4027&quot; target=&quot;_self&quot;&gt;ObjectAnimationUsingKeyFrames&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;보간법 : 각 KeyFrames에 저장될수 있는 키 프레임은 다음과 같다.&lt;br  /&gt;&lt;br  /&gt;&lt;/strong&gt;
&lt;p&gt;DoubleAnimationUsingKeyFrames&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;- Discrete&lt;strong&gt;Double&lt;/strong&gt;KeyFrame &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;- Linear&lt;/span&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;&lt;strong&gt;Double&lt;/strong&gt;KeyFrame&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;Spline&lt;/span&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;&lt;strong&gt;Double&lt;/strong&gt;KeyFrame&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;Easing&lt;/span&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;&lt;strong&gt;Double&lt;/strong&gt;KeyFrame&lt;br  /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;PointAnimationUsingKeyFrames&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;- Discrete&lt;strong&gt;Point&lt;/strong&gt;KeyFrame&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;- Linear&lt;strong&gt;Point&lt;/strong&gt;KeyFrame&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;-&amp;nbsp;Spline&lt;strong&gt;Point&lt;/strong&gt;KeyFrame&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;-&amp;nbsp;Easing&lt;strong&gt;Point&lt;/strong&gt;KeyFrame&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;ColorAnimationUsingKeyFrames&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;- Discrete&lt;strong&gt;Color&lt;/strong&gt;KeyFrame&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;- Linear&lt;strong&gt;Color&lt;/strong&gt;KeyFrame&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;-&amp;nbsp;Spline&lt;strong&gt;Color&lt;/strong&gt;KeyFrame&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;-&amp;nbsp;Easing&lt;strong&gt;Color&lt;/strong&gt;KeyFrame&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;ObjectAnimationUsingKeyFrames&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #cccccc&quot;&gt;- Discrete&lt;strong&gt;Object&lt;/strong&gt;KeyFrame&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;위에서 각 Frame은 다음의 4그룹으로 나누어진다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;a) &lt;a class=&quot;self&quot; href=&quot;http://www.myifu.com/study/4010&quot; target=&quot;_self&quot;&gt;선형 보간법 Linear interplation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;b) &lt;a class=&quot;self&quot; href=&quot;http://www.myifu.com/study/4013&quot; target=&quot;_self&quot;&gt;스플라인 보간법 Spline Interplation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;c) &lt;a class=&quot;self&quot; href=&quot;http://www.myifu.com/study/4016&quot; target=&quot;_self&quot;&gt;불연속 보간법 Discrete Interplation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;d) &lt;a class=&quot;self&quot; href=&quot;http://www.myifu.com/study/4019&quot; target=&quot;_self&quot;&gt;EasingFunction을 이용한 보간법&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Animation - EasingFunction</title>
      <id>http://www.myifu.com/3984</id>
      <published>2010-02-03T17:54:47+09:00</published>
      <updated>2010-02-03T20:37:50+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/3984"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/3984#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;strong&gt;EasingFunction&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;애니메이션에 다양한 효과를 주기 위해 사용하는 프로퍼티. 아래 11가지 종류가 있다.&lt;/p&gt;
&lt;p&gt;BackEase&lt;/p&gt;
&lt;p&gt;BounceEase&lt;/p&gt;
&lt;p&gt;CircleEase&lt;/p&gt;
&lt;p&gt;CubicEase&lt;/p&gt;
&lt;p&gt;ElasticEase&lt;/p&gt;
&lt;p&gt;ExponentialEase&lt;/p&gt;
&lt;p&gt;PowerEase&lt;/p&gt;
&lt;p&gt;QuadraticEase&lt;/p&gt;
&lt;p&gt;QuarticEase&lt;/p&gt;
&lt;p&gt;QuinticEase&lt;/p&gt;
&lt;p&gt;ShinEase&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EasingMode&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;EaseOut : 기본 그래프, default value&lt;/p&gt;
&lt;p&gt;Easeln : EaseOut을 반대로 바꾼 그래프&lt;/p&gt;
&lt;p&gt;EaselnOut : 위 두가지를 혼합한 그래프&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EasingMode = EaseOut&lt;/strong&gt; 
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;UserControl.Resources&amp;gt;
 &amp;lt;Storyboard x:Name=&quot;MyStoryboard&quot;&amp;gt;
  &amp;lt;DoubleAnimation BeginTime=&quot;00:00:00&quot; Duration=&quot;00:00:05&quot; To=&quot;270&quot; Storyboard.TargetName=&quot;ellipse&quot; Storyboard.TargetProperty=&quot;(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)&quot;&amp;gt;
   &amp;lt;DoubleAnimation.EasingFunction&amp;gt;
    &amp;lt;BounceEase Bounces=&quot;6&quot; /&amp;gt;
   &amp;lt;/DoubleAnimation.EasingFunction&amp;gt;
  &amp;lt;/DoubleAnimation&amp;gt;
 &amp;lt;/Storyboard&amp;gt;
&amp;lt;/UserControl.Resources&amp;gt;
&amp;lt;Canvas x:Name=&quot;LayoutRoot&quot;&amp;gt;
 &amp;lt;Ellipse x:Name=&quot;ellipse&quot; Height=&quot;100&quot; VerticalAlignment=&quot;Top&quot; Width=&quot;100&quot; Canvas.Left=&quot;150&quot; Canvas.Top=&quot;30&quot; RenderTransformOrigin=&quot;0.5,0.5&quot;&amp;gt;
  &amp;lt;Ellipse.RenderTransform&amp;gt;
   &amp;lt;TransformGroup&amp;gt;
    &amp;lt;ScaleTransform/&amp;gt;
    &amp;lt;SkewTransform/&amp;gt;
    &amp;lt;RotateTransform /&amp;gt;
    &amp;lt;TranslateTransform/&amp;gt;
   &amp;lt;/TransformGroup&amp;gt;
  &amp;lt;/Ellipse.RenderTransform&amp;gt;
  &amp;lt;Ellipse.Fill&amp;gt;
   &amp;lt;LinearGradientBrush EndPoint=&quot;0.5,1&quot; StartPoint=&quot;0.5,0&quot;&amp;gt;
    &amp;lt;GradientStop Color=&quot;#FF0100FF&quot; Offset=&quot;0&quot;/&amp;gt;
    &amp;lt;GradientStop Color=&quot;#FF908FFF&quot; Offset=&quot;1&quot;/&amp;gt;
   &amp;lt;/LinearGradientBrush&amp;gt;
  &amp;lt;/Ellipse.Fill&amp;gt;
 &amp;lt;/Ellipse&amp;gt;
&amp;lt;/Canvas&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;br  /&gt;View : &lt;a href=&quot;http://myifu.com/_study/silverlight/template_animation_11_easingfunction01/&quot;&gt;http://myifu.com/_study/silverlight/template_animation_11_easingfunction01/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EasingMode = EaseIn&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;UserControl.Resources&amp;gt;
 &amp;lt;Storyboard x:Name=&quot;MyStoryboard&quot;&amp;gt;
  &amp;lt;DoubleAnimation BeginTime=&quot;00:00:00&quot; Duration=&quot;00:00:05&quot; To=&quot;270&quot; Storyboard.TargetName=&quot;ellipse&quot; Storyboard.TargetProperty=&quot;(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)&quot;&amp;gt;
   &amp;lt;DoubleAnimation.EasingFunction&amp;gt;
    &amp;lt;BounceEase Bounces=&quot;6&quot; EasingMode=&quot;EaseIn&quot; /&amp;gt;
   &amp;lt;/DoubleAnimation.EasingFunction&amp;gt;
  &amp;lt;/DoubleAnimation&amp;gt;
 &amp;lt;/Storyboard&amp;gt;
&amp;lt;/UserControl.Resources&amp;gt;
&amp;lt;Canvas x:Name=&quot;LayoutRoot&quot;&amp;gt;
 &amp;lt;Ellipse x:Name=&quot;ellipse&quot; Height=&quot;100&quot; VerticalAlignment=&quot;Top&quot; Width=&quot;100&quot; Canvas.Left=&quot;150&quot; Canvas.Top=&quot;30&quot; RenderTransformOrigin=&quot;0.5,0.5&quot;&amp;gt;
  &amp;lt;Ellipse.RenderTransform&amp;gt;
   &amp;lt;TransformGroup&amp;gt;
    &amp;lt;ScaleTransform/&amp;gt;
    &amp;lt;SkewTransform/&amp;gt;
    &amp;lt;RotateTransform /&amp;gt;
    &amp;lt;TranslateTransform/&amp;gt;
   &amp;lt;/TransformGroup&amp;gt;
  &amp;lt;/Ellipse.RenderTransform&amp;gt;
  &amp;lt;Ellipse.Fill&amp;gt;
   &amp;lt;LinearGradientBrush EndPoint=&quot;0.5,1&quot; StartPoint=&quot;0.5,0&quot;&amp;gt;
    &amp;lt;GradientStop Color=&quot;#FF0100FF&quot; Offset=&quot;0&quot;/&amp;gt;
    &amp;lt;GradientStop Color=&quot;#FF908FFF&quot; Offset=&quot;1&quot;/&amp;gt;
   &amp;lt;/LinearGradientBrush&amp;gt;
  &amp;lt;/Ellipse.Fill&amp;gt;
 &amp;lt;/Ellipse&amp;gt;
&amp;lt;/Canvas&amp;gt;&lt;/pre&gt;&lt;br  /&gt;&lt;br  /&gt;View : &lt;a href=&quot;http://myifu.com/_study/silverlight/template_animation_11_easingfunction02/&quot;&gt;http://myifu.com/_study/silverlight/template_animation_11_easingfunction02/&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Animation - 3) ColorAnimation</title>
      <id>http://www.myifu.com/3981</id>
      <published>2010-02-03T17:53:14+09:00</published>
      <updated>2010-02-03T18:17:46+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/3981"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/3981#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;Color&amp;nbsp;type의 프로퍼티를 변경하기 위한 애니메이션&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;Canvas x:Name=&quot;LayoutRoot&quot;&amp;gt;
 &amp;lt;Canvas.Resources&amp;gt;
  &amp;lt;Storyboard x:Name=&quot;pathAnimation&quot;&amp;gt;
   &amp;lt;ColorAnimation Duration=&quot;00:00:01&quot; Storyboard.TargetName=&quot;myPath&quot; Storyboard.TargetProperty=&quot;(Ellipse.Fill).(SolidColorBrush.Color)&quot; To=&quot;Pink&quot; /&amp;gt;
  &amp;lt;/Storyboard&amp;gt;
 &amp;lt;/Canvas.Resources&amp;gt;
 &amp;lt;Path Fill=&quot;Beige&quot; Margin=&quot;0,0,200,200&quot; x:Name=&quot;myPath&quot;&amp;gt;
  &amp;lt;Path.Data&amp;gt;
   &amp;lt;EllipseGeometry x:Name=&quot;myEllipseGeometry&quot; Center=&quot;200,110&quot; RadiusX=&quot;50&quot; RadiusY=&quot;50&quot; /&amp;gt;
  &amp;lt;/Path.Data&amp;gt;
 &amp;lt;/Path&amp;gt;
&amp;lt;/Canvas&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;View : &lt;a href=&quot;http://myifu.com/_study/silverlight/template_animation_10_coloranimation01/&quot;&gt;http://myifu.com/_study/silverlight/template_animation_10_coloranimation01/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Animation - 2) PointAnimation</title>
      <id>http://www.myifu.com/3975</id>
      <published>2010-02-03T17:52:02+09:00</published>
      <updated>2010-02-03T18:10:01+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.myifu.com/3975"/>
      <link rel="replies" type="text/html" href="http://www.myifu.com/3975#comment"/>
      <author>
         <name>phoebe</name>
                  <uri>http://myifu.com</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;Point&amp;nbsp;type의 프로퍼티를 변경하기 위한 애니메이션&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;Canvas x:Name=&quot;LayoutRoot&quot;&amp;gt;
 &amp;lt;Canvas.Resources&amp;gt;
  &amp;lt;Storyboard x:Name=&quot;pathAnimation&quot;&amp;gt;
   &amp;lt;PointAnimation Storyboard.TargetName=&quot;myEllipseGeometry&quot; Storyboard.TargetProperty=&quot;Center&quot; Duration=&quot;00:00:01&quot; To=&quot;200,290&quot; /&amp;gt;
  &amp;lt;/Storyboard&amp;gt;
 &amp;lt;/Canvas.Resources&amp;gt;
 &amp;lt;Path Fill=&quot;Beige&quot; Margin=&quot;0,0,200,200&quot; x:Name=&quot;myPath&quot;&amp;gt;
  &amp;lt;Path.Data&amp;gt;
   &amp;lt;EllipseGeometry x:Name=&quot;myEllipseGeometry&quot; Center=&quot;200,110&quot; RadiusX=&quot;50&quot; RadiusY=&quot;50&quot; /&amp;gt;
  &amp;lt;/Path.Data&amp;gt;
 &amp;lt;/Path&amp;gt;
&amp;lt;/Canvas&amp;gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;View : &lt;a href=&quot;http://myifu.com/_study/silverlight/template_animation_09_pointanimation01/&quot;&gt;http://myifu.com/_study/silverlight/template_animation_09_pointanimation01/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  
   </entry>
</feed> 
