연결을 확인하는 클래스

 

public partial class SilverCompatLayer : ICompatLib
{
    public bool IsConnectedToInternet()
    {
        string host = "...";
        bool result = false;
        Ping p = new Ping();
        try
        {
            PingReply reply = p.Send(host, 3000);
            if (reply.Status == IPStatus.Success)
                return true;
        }
        catch { }

        return result;
    }

    public string GetRawQuoteInfo(string symbol)
    {
        string output = String.Empty;
        StreamReader reader = null;

        // Set the URL to invoke
        string url = String.Format(UrlBase, symbol);

        // Connect and get response
        WebRequest request = WebRequest.Create(url);
        WebResponse response = request.GetResponse();

        // Read the response
        using (reader = new StreamReader(response.GetResponseStream()))
        {
           output = reader.ReadToEnd();
           reader.Close();
        }

        return output;
    }

    // A few other methods that require a different implementation 
    // (See source code)
    ...
}
 
 
 

위의 클래스로 만들어진 메소드

private bool IsConnectedToInternet()
{
    ICompatLib layer = ServiceResolver.ResolveCompatLayer();
    return layer.IsConnectedToInternet();
}

 

 

SilverCompatLayer 클래스는 별도의 어셈블리에 있습니다. WPF 코드를 Silverlight로 옮기거나 그 반대로 옮길 때 이 어셈블리

만 변경하면 됩니다.

필요한 플랫폼별 전략 클래스를 만들고 나면 Silverlight 버전의 응용 프로그램을 만들기만 하면 됩니다. 원본 WPF 응용 프로그램에서 파생된 Silverlight 프로젝트에는 호환 어셈블리를 제외하고 WPF 응용 프로그램과 동일한 파일이 모두 들어 있습니다.

이 기사와 관련된 코드 다운로드를 확인해 보면 사용할 전략 구현을 결정하기 위해 팩터리 메서드에서 기반 클래스를 명시적으로 인스턴스화했다는 것을 알 수 있습니다. 이와 같이 클래스를 직접 인스턴스화하거나 구성 파일에서 클래스의 이름을 읽어 인스턴스를 가져오는 리플렉션을 사용할 수 있습니다. 이러한 구현 세부 사항은 작성 중인 시스템 유형에 따라 크게 달라집니다. WPF에서 Silverlight로의 호환성의 경우 전략과 레이어는 반드시 알아야 하는 중요한 개념입니다.

최종 고려 사항

샘플 응용 프로그램에서 필자는 네트워크 호출을 수행했습니다. 원본 WPF 응용 프로그램에서 이 호출은 동기적입니다. 그러나 Silverlight 2에서는 동기 네트워크 호출에 대한 지원을 전혀 제공하지 않습니다. 동기 호출을 수행할 수 있는 유일한 방법은 앞서 말했던 브라우저의 XMLHttpRequest 구현을 호출하는 방법을 사용하는 것입니다. 자세한 내용은 소스 코드를 참조하십시오.

샘플 코드에서 필자는 원본 WPF 응용 프로그램을 웹으로 옮기는 데 성공했습니다. 코드를 옮길 때 Silverlight 환경의 기본 기능을 고려하여 적합할 경우 응용 프로그램의 구조를 수정해야 할 수도 있습니다. 필자가 사용한 간단한 예에서는 WPF 응용 프로그램을 수정하는 것보다 Silverlight 프로그래밍 모델을 사용하여 응용 프로그램을 재작성하는 것이 코드 양도 적고 노력도 덜 들었습니다.

그래서 WPF와 Silverlight는 XAML과 같은 순수하게 시각적인 기능과 관련해서 공통점이 많습니다. 그러나 기본 프로그래밍 모델은 약간 다르고 WPF에서 작동하는 솔루션을 Silverlight에 항상 그대로 적용할 수 있는 것은 아니며 그 반대의 경우도 마찬가지입니다. 따라서 WPF와 Silverlight 응용 프로그램 간에는 분명히 XAML과 코드를 공유할 수 있습니다.

 

출처

http://msdn.microsoft.com/ko-kr/magazine/cc895632.aspx

 

 

 

+ Recent posts