쇼티입니다. 간단하게 버전체크하는 방법을 알려드리려고 해요.

 Silverlight.js라는 파일이 기본 샘플프로젝트에 포함이 되어있죠. 이 js 파일이 사실 굉장히 유용한 함수들이 많지요.
 (http://msdn.microsoft.com/ko-kr/library/cc838126(VS.95).aspx)

 물론 버전관리하는 함수도 있습니다. 바로 isInstalled 라는 함수입니다.

 
 (bool) = Silverlight.isInstalled(버전번호)


 이렇게 들어가구요. 이 버전 번호는 각각, 

 버전 MIME TYPE  버전 번호  설치관리자 URL 
 Silverlight 1.0 application/x-silverlight  1.0  
 Silverlight 2.0 application/x-silverlight-2, 2.0.31005  
 Silverlight 3.0 application/x-silverlight-2, 3.0.40620   
  (설치관리자 URL : http://go.microsoft.com/fwlink/?LinkID=149156 공용 실버라이트 3 플러그인 링크)

 이렇습니다. 그래서, isInstalled('2.0'), isInstalled('3.0') 이라고 넣어주는것이 아니라,
 isInstalled('2.0.31005'), isInstalled('3.0.40620') 으로 확실히 넣어주어여 bool 값이 제대로 찍힙니다.

 그리고 버전에 관계없이 실버라이트 설치 여부는 isInstalled(null) 로 식별이 가능하니 이것도 참고해주시구요.

 그리고 MIME TYPE은 <object> 태그에서의 마임입니다. 절대 iis의 마임타입이 아닙니다. 
 iis의 마임타입은 'application/x-silverlight-app' 입니다. 

 혹시 실버라이트 배포하실때 2104 에러가 났다면 십중팔구 마임타입 설정 안되있는 것입니다. 해당 xap가 들어있는 디렉토리
 에 MIME 타입을 걸어주세요.
 
 참고되시길 바랍니다. ^^
 

이번에 Silverlight 3에서 Out Of Browser라는 것이 생겼다.
브라우저 밖에서. 즉, 실버라이트 어플리케이션이 웹을 거치지 않는 환경에서 실행이 된다는 내용인데.

오늘 실버라이트 코리아 포럼에 답글을 달다가 문득 느꼈다.
'그러면 Out of Browser는 웹이 안들어오는 환경에서 실행이 가능한가?'

... 곰곰히 생각해봤는데. 이게 안되는거다.
흔히 Out Of Browser를 소개할 때, '웹이 안되는 환경에서도 실버라이트 어플리케이션을 구동할 수 있습니다' 라고들 한다.

이 말이 틀린 말은 아니다. 일단 실버라이트를 인스톨을 하고 나면 웹이 안들어와도 실행이 되게끔 로직을 짜면 되니까.
그런데. 아이러니하게도 '최초 한번은 실버라이트 웹페이지에 랜선을 연결하고 접속을 해야된다'는 이야기가 되지 않는가?

물론 아는 분들은 '그걸 염두에 두고' 프로세스를 진행하니까 별 문제 없지만,
고객에게 자사의 웹페이지를 Out Of Browser 기능을 사용하여 꾸미고, '웹이 들어오지 않는 환경에서도 접속이 가능합니다'
라고 물으면.. 분명히 나중에 클레임이 들어온다는 이야기다. '장난하는거냐'고.

필자 입장에서도 기가 막힐꺼다. 아니 '웹이 들어오지 않는 환경'이라고 해놓고, 일단 '접속해서 다운을 받아야 한다'니.
머라 할 수도 없다. 그 문장 해석의 차이가 되버리니까.

그러면, 한번만 랜선을 연결해서 다운받고 그뒤부터는 랜선을 뽑고 작업을 해야된다는건가?

좀 더 생각을 해봐야한다. 또, 인터넷이 불가능한 지역에서 뭘 얼마나 더 할 수 있을까도 생각해봐야 한다.

Out Of Browser라는 것은 편의성 측면에서는 분명 좋은 기능임에는 틀림이 없지만.
요즘 회사에 랜선이 안들어오는 회사가 그렇게 많이 존재할까? 그렇게 Out Of Browser가 대단한 기능인지는
의문이 앞선다.

생각을 해보자. 고객 입장에서 '인스톨을 해놓고 그 실버라이트 어플리케이션을 바탕화면 바로가기' 해두는 것과
'실버라이트 웹페이지 즐겨찾기'를 해두는 것. 과연 차이가 크게 날까.

그리고, 고객에게 '랜선이 들어오지 않는 환경'으로 실버라이트 작업을 한다 하면, 과연 활용범위가 넓을까?
개인이 그냥 '우와 이쁘다~' 하고 그 실버라이트 어플리케이션을 계속 실행시킬까.

모르긴 몰라도 회사 그룹웨어나, 기타 기업웹페이지같이, DB를 중점적으로 사용하는 업체에서는
도대체 랜선이 들어오지 않는 실버라이트 어플리케이션으로. 무엇을 할 수 있을까.
  • 승미. 2009.09.18 01:56 신고

    인터넷에 연결하지 않고도, Silverlight 3 Runtime이 설치되있다면 XAP 파일만으로 OOB를 설치할 수 있는 무엇인가가 있었으면 좋겠군요 ^^

    • Shorty. Kei. 2009.09.21 12:40 신고

      바로 그거예요 ㅋ
      첨부터 웹이 안들어온다는 가정을 하고 계획을 했으면
      더 좋았을 꺼라는 생각이 자꾸 드네염.

      XAP 파일 배포패키지를 따로 만드는 위저드를
      제공한다던지.. 머 이런 것들.. ^^;

  • 네오군 2009.10.14 16:18

    아웃오브 브라우저는 WPF의 장점과 실버라이트의 장점을 모두 버린.. 어중간한 포지션으로 미운오리새끼가 될듯...

  • 35mmst 2010.03.28 19:56

    Adobe Air는 오프라인에서 실행이 가능했었던것 같은데... 기억이 잘 안나지만

    저도 보면서... 같은 생각을 했습니다. 바로가기와 뭐가 틀리지?

    뭐 아직은 완벽한 기능이 아닌것 같습니다.

  • 무쇠다리 2010.06.15 15:37

    아웃오브브라우저는 말그대로 브라우저 밝에서 실행된다는 의미겠지요.
    즉 브라우저를 구동시키지 않아도 독립어플리케이션처럼 동작한다는 의미고요.
    예를 들면 위젯같은 형태의 어플을 브라우저 밖에서 동작하도록 지원할 수 있다는 겁니다.
    지금 말씀하시는 기능은 오프라인 기능인듯 한데요, 오프라인 기능은 전혀 네트웍이 연결되지 않은 환경이 아니라, 일시적으로 네트웍이 끊긴 상태에서도 작업을 지원한다는 의미가 아닐까요.

9월 16일 세미나 준비를 하는 중에, Local Connection이.. 좋긴 한데 확장성이 그닥 좋지 않은것을 알았습니다.


몇가지 실험 결과를 알려드립니다.

(1) 대소문자 구별.

 - 즉, Sender가 "ShortyLuv"였을 때, Receiver가 "shortyLuv"라면 전달루틴이 발생하지 않습니다.
   이건 예상 가능했기 때문에 그렇다 치죠.


(2) 2개 이상 등록 불가능

 - 가장 황당했던 에러입니다.


  그러니까, Sender가 1개, Receiver가 2개라고 했을 경우에 이 Receiver 2개는 각각 다른 식별키를 사용해야 한다는
  이야기죠. 즉 Sender에서도 LocalMessageSender를 2개를 등록해야 한다는 이야기가 나옵니다.

  ... 이럼... 이게 몹니까.. 그냥 Silverlight -> JavaScript -> Silverlight 와 다른 것이 없어보입니다.
  그것보다 1:1만 지원이 된다는 것이 좀 아쉽네요.
 

(3) HtmlPage 클래스의 함수 사용에 제약이 있는 듯 보입니다.

 

  글쎄요.. 혹시 LocalConnection 자체가 HtmlDom을 읽어들이지 못하는건가 생각해봤는데. 생성자에 Alert를 붙여보니
  그건 또 잘 동작하더군요. HtmlDom을 사용하는 루틴은 사용하지 못하는 듯 보입니다.

  다른 변수로 바꿔서 실행해봐도 그렇고, 따로 함수로 빼서 실행해봐도 결과는 같습니다.

  ... 왜이럴까요..


결론은 LocalConnection은 'XAP이 2개일때만 쓰자' 라는 것이 되겠네요.. 구글링을 해봐도
아직까지 Silverlight 3에 대한 이슈는 활성화되어있지 않은 모양입니다..

mms. 말 그대로 Windows Media Server를 이용하여 스트리밍으로 뿌려주는 프로토콜이지요.

이 mms를 실버라이트에서 쓰려고 할때, 잘 안되는 경우가 많습니다.


분명 웹페이지에 그냥 mms://어쩌고.. 쓰면 잘 나오던 것이 왜 실버라이트로 가면 안되는가..

구글링 끝에 해결이 되었습니다. (제 경우라 다양한 돌발상황에 대해서는 잘 모릅니다;;)


일단 보통 서버에는 IIS가 올라가있을 것입니다. 이게 포트 80번을 씁니다.

그런데 미디어서버를 설치하면. 이거 역시 포트 80번을 씁니다. (WMS HTTP Protocol)

실버라이트에서는 포트번호를 명시하지 않고 바로 MediaElement의 Source에 mms://어쩌고.. 를 바로 써주면

이 포트 80번의 충돌때문에 미디어가 동작하지 않는 것이지요..

즉.


이 WMS HTTP 서버 제어 프로토콜이 기본적으로 포트 80을 사용한다는 데에 문제가 있었습니다.

(그리고 아마 '사용 안함'으로 되어있을 것입니다. 그래서 포트를 설정해주고 '사용' 해주어야 합니다)


이 아이템을 클릭하면 바로 속성창이 나옵니다.


그래서 다른 포트 사용을 하셔서.. 사용하지 않는 포트 숫자를 적어줍니다. 서비스를 다시 실행시키고 나서

기존의 소스를 적용해봅니다.

     this.me_played.Source = new Uri("mms://xxxxxx:7870/xxxxxx.wmv", UriKind.Absolute);
     this.me_played.Play();        


그럼 적용이 잘 될 것입니다.

주의할 점은, 반드시 포트번호를 명시해주어야 한다는점. 그리고 이 경우의 7870이 방화벽에 막혀있음 안될 가능성도 있으니

방화벽 포트 예외 처리를 해주어야 한다는 점 등이 있습니다.


감사합니다.
  

쇼티예요. 이번 릴리즈 된 실버라이트 3에는 Blend에 Sketch Flow라는 기능이 추가가 되었습니다.

이게 무엇이냐 하면, 기업에서 쓰는 워크플로우를 실버라이트 버전으로 구성한 것이라고 할 수 있겠습니다.
(자세히는 모르겠는데, 일반적으로 이걸로 서비스를 할 수는 없어보이는군요)

일단 무엇인지를 알아보기 위해서 튜토리얼을 간단하게 해보겠습니다.
(출처 : 튜토리얼 참고는 이곳에서 했습니다)

일단 blend 3에서 프로젝트를 새로 만드시려 하시면 다음과 같은 메뉴를 볼 수 있습니다.


WPF로도 SketchFlow 버전이 있습니다만. 실버라이트 3를 선택해보도록 하겠습니다.
만드시면.. 일단 프로젝트 내용을 보면.


Fonts는, 스케치플로우에 필요한 폰트들이 들어가있는 곳입니다. 이건, 스케치플로우 전용 컨트롤들이 여기에 걸려있는듯
보입니다. 새로 추가할 수 있는지는 모르겠습니다.
Screen 1은, 가장 맨 처음에 띄울 장면, Sketch.Flow는 이 스크린들이 어떤 루트로 가는지를 설정해둔 파일이구요.
SketchStyles.xaml은, 이 스케치플로우를 돌릴때 필요한 스타일들을 정의해둔 곳입니다.


그니까 이런 식으로 사용이 가능합니다. 기획자가 어떤 프로젝트에 대한 기획을 한다고 해봅시다.
그리고, 맨 처음에 PPT로 제안서를 제출하죠. 이때 이 제안서를 만드는 과정이라 보시면 됩니다.

홈페이지를 예로 들면, '홈', '회사 소개', '제품 소개', '컨택트 어스' 이런 식으로 메뉴가 쭉 있습니다.
그리고, '회사소개'에는 '연혁', 'CEO 인사말', '조직구성' 등등이 들어가겠지요. 이렇게 구성을 하는것입니다.

위 표를 보시면, 맨 처음에 Start입니다. 여기 다음은 WelCome이고, 그다음에 그 부속으로 Customers, Products, Orders가
있고, 이 다음단계는 공통으로 CheckCustomerReport가 있고, 그 다음으로 CheckOut이 있습니다.

그래서 흔히 기업에서 이야기하는 '워크플로우'를 구성하는 것이 목적입니다.

워크플로우를 구성하면서 가장 중요한것은 뭐가 있을까요. 'FeedBack'이 제일 중요할 것입니다.
이 제안서를 나만 볼려고 만드는게 아니라, 여러사람에게 보여주고 '뭐가 잘못됐다' '이건 이렇게 했으면 좋겠다' 라고,
자문을 구해서, 그걸 수정해서 최종적으로 OK 사인을 받고 일정을 잡고... 이런 식이죠.


일단 밑에 Screen 1이라는 것이 보일 것입니다. 이것의 이름을 Start로 바꾸고, 여기에 마우스를 대면 밑에 메뉴가 뜨는데,
여기서 create a connected screen을 누릅니다.

한번 해보시면 대충 방식을 아실 듯 보입니다. 이렇게 해서, 이 전의 그림처럼 플로우를 구성해줍니다.
(보시면, 이 스크린 하나 만들때마다 xaml은 계속 생기는 것을 볼 수 있지요)

여기까지 누르시고 f5로 빌드 + 실행을 해보시면 이와 같이 나옵니다.


기본 스케치플로우의 아웃풋입니다. 좌측의 Navigate는, 이 상태에서 현재 갈 수 있는 곳을 쭉 표시해줍니다.
지금 현재는 Start의 화면이기때문에, 나오는 것이 Welcome밖에 없겠지만 아마 Welcome을 선택한 후에는
예의 3가지가 뜨겠지요.

그리고 프로그레시브 바로 이 배율을 지정해줄 수 있고.. 밑에는 피드백을 위한 도구들이 있습니다.

이정도입니다. 이제부터는 여러분들이 화면을 구성하시고, 디자인하셔서 이것을 서버에 올려놓고 피드백을 다른 분들
에게 받으시면 됩니다.

중간에 한가지 팁이 나오는데요. 만약 한 화면에 중복된 컴포넌트를 쓰고 싶다라고 하시면, 이걸 따로 빼는 방법이 있어요.


이렇게, 자주 쓰이겠다 싶은 구성물들을 그룹으로 묶어주고 오른쪽 버튼으로 Make into Component Screen을 누르면,
플로우 맵에 다음과 같이 나타나네요.


그래서, 다음과 같이 이 컴포넌트가 필요한 스크린에 전부 걸 수 있습니다.


그다음에 스테이트를 줄 수 있고, 네비게이트를 줄 수 있습니다.

그리고, 이제 이것을 서버에 올려놓으면 피드백을 받을 수 있는데요. 피드백 주는 방법은 간단합니다.
그냥 그리고 저장해두면 됩니다.


필요한 부분을 표시를 하고, 왼쪽 아래와 같이 브리핑을 할 수도 있습니다.

그래서 브리핑부분 위에 '폴더' 모양 비스무리하게 되어있는 곳을 클릭하면 'Export'를 선택할 수 있는데,
여기서 이름과, 파일로 저장이 가능합니다.

이렇게 되면, 블랜드로 열었을 때, 피드백 탭을 선택하여 상대가 피드백을 지정한 부분이 보이게 되는거죠.


이것이 대강의 스케치플로우의 흐름입니다만. 글쎄요.
스타일러스(전자펜 같은거)가 지원이 되는지는 잘 모르겠습니다만, 그닥 고객들이 선뜻 쓰려 하지 않을꺼같다는 느낌이
드네요. 왠지 '기획'이라는걸 하면서도 프로그래밍을 해야된다는 느낌이랄까요.

이 기능은 아마도 개발자보다는 PM이나, 그쪽에서 많이 쓸 듯 싶은데, 좀 많이 복잡하네요.
블렌드에서 스케치플로우를 쓰는건 무리수가 아니었나 하는 생각이 듭니다.

그리고 원터치로 서버 변수를 지정해주면 자동으로 올릴 수 있는 기능이.. 혹시 있는지는 모르겠습니다만.
이거 바꾸고 계속 서버(IIS 등)로 옮겨줘야 한다는 것이 또한 애로사항일 지도 모르겠습니다.

취지는 좋았지만, 좀 더 '보여주기' 식이 아닌, '주 고객층이 누구인지를 생각하는' 모델이 되었으면 하는
아쉬움이 있습니다.

그냥 'PPT'로 그리고 말죠..