Search Results for 'Silverlight 1.1 [Old]'


36 POSTS

  1. 2008/02/08 인터넷 익스플로어에 키오스크 모드가 있다는 걸 아셨나요? (2)
  2. 2008/01/28 FlickrNet (.NET용 Flickr API Kits) 수정할 부분.
  3. 2008/01/23 [Flickr Finder] Flickr API Key 발급받기
  4. 2008/01/23 Add Silverlight Link 사용 시의 팁. (1)
  5. 2008/01/10 Flickr Finder Update! (검색어 자동완성기능과 Flickr 웹페이지 링크) (3)
  6. 2007/12/29 Text Dragon (문자열이 용처럼 날아다니는 방명록)
  7. 2007/12/26 [엉뚱한실험6] Silverlight & HTTP Referer
  8. 2007/12/26 Silverlight와 WebService(.NET 3.5) 연동하기 (3)
  9. 2007/12/25 Silverlight와 WebService(.NET 2.0) 연동하기
  10. 2007/12/20 [엉뚱한실험5] Silverlight객체와 Html엘리먼트 Overlap (4)
  11. 2007/12/18 [엉뚱한실험4] Transform이 적용된 객체에서 MouseEventArgs GetPosition 결과값 비교
  12. 2007/12/18 [엉뚱한실험3] TextBlock에서 "A", "B"의 ActualWidth 합과 "AB"의 ActualWidth는 같을까요?
  13. 2007/12/14 InkPresenter 방명록 만들기 - 6. Stroke Size Controler User Control 만들기 (2)
  14. 2007/12/14 Blend를 통해 User Control 추가하기 (1)
  15. 2007/12/05 [실버라이트] Flickr Finder 페이지 네비게이션 용 Slider 장착
  16. 2007/12/04 ComboBox 역할하는 UserControl 소스
  17. 2007/12/04 Flickr Finder 검색 옵션, 정렬 옵션 추가하였습니다. (2)
  18. 2007/11/21 실버라이트 한 줄 TextBox 유저 컨트롤
  19. 2007/11/14 실버라이트로 만드는 Flickr Finder [진행중...]
  20. 2007/11/08 .NET Framework 3.5 WebService와 Silverlight 연동 - Flickr 이미지 검색 데모 (1)

요즘 박스마일, 공도님, 이과장님과 함께 뭔가를 만들고 있는데,
실버라이트 어플리케이션을 Full Screen모드의 키오스크 스크린처럼
사용할 필요가 있어서 이런 저런 방법을 궁리하던 중...
(Need : 전체화면으로 작동하고, 리부트 시에도 자동으로 시작)

공도님이나 김대우과장님께서는,
브라우저컨트롤을 하나 품은 Full Screen Size 윈폼 어플리케이션을 제안하셨고...

저는 실버라이트가 명색이 크로스플랫폼을 지향하는데,
것보단 이런 방법을 간단히 써보자고 제안했어요.
(사실 이 프로젝트의 제한조건에는 크로스플랫폼은 고려할 필요가 없었습니다만 ^^;;;)

인터넷 익스플로어에서
- 시작페이지를 실버라이트 어플리케이션 URL로 설정합니다.
- 상태표시줄을 감추고,
- F11을 누른 다음,
- 종료합니다.

이 상태가 저장된 레지스트리 파일을 내보내기 하여 만들어 놓고.

이 레지스트리 파일을 등록하고,
인터넷 익스플로어를 작동시키는 cmd 파일을 생성하여
시작 프로그램 항목에 추가합니다.

공도님과 열심히 작업을 하고 있을 때,
이과장님께서 다른 간단한 방법이 있다는 것을 전해듣고 경악...
저만 모르고 있었던 것은 아닌지 걱정되네요. ^^

실행창에서 아래와 같이 입력하면 FlickrFinder가 Full Screen으로 키오스크모드로 뜹니다.

iexplore -k shiverlight.net/Demos/FlickrFinder

통짜로 디자인된 프로덕트를 만드실 때 유용할 것 같습니다.

다음 샘플파일은 테스트용 보너스! 클릭해서 바로 실행해 보세요.

[샘플파일]


이런식으로 cmd파일 형태로 만들어서 시작프로그램에 등록해 놓으면 컴퓨터를 리부트해도 오케이!


 

이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : kiosk, Silverlight, 실버라이트, 키오스크, 통짜

  1. 흠..

    한창 채널 서비스 유행할떄... 4.0인가 부터 있던 기능인데.. ㅡㅡ;

    | 2008/05/20 11:58 | PERMALINK | EDIT | REPLY |
  2. BlogIcon 길버트

    아, 그랬군요! 정말 오래된 전통을 가진 기능이네요. ^^

    | 2008/05/21 09:06 | PERMALINK | EDIT | REPLY |
코멘트를 남겨 주세요. (Write your message and submit)

FlickrNet (.NET용 Flickr API Kits) 수정할 부분.

Posted 2008/01/28 16:06 by 길버트

1. Flickr Buddy Icon URL 규약

Flickr에 사진을 업로드한 사람의 Profile Image에 해당하는 Buddy Icon 규약은 다음과 같습니다.

Buddyicons

Every flickr user has a 48x48 pixel buddyicon used to represent themselves.

You can construct the url of a buddyicon once you know the user's NSID, icon server and icon farm, as returned by many api methods.

If the icon server is greater than zero, the url takes the following format:

http://farm{icon-farm}.static.flickr.com/{icon-server}/buddyicons/{nsid}.jpg

else the following url should be used:

참고 : http://www.flickr.com/services/api/misc.buddyicons.html


2. How to make Buddy Icon URL using API

한편, API 를 통해서 가져오는 사용자 정보는 다음과 같습니다.

<person nsid="12037949754@N01" isadmin="0" ispro="0" iconserver="122" iconfarm="1">
	<username>bees</username>
	<realname>Cal Henderson</realname>
        <mbox_sha1sum>eea6cd28e3d0003ab51b0058a684d94980b727ac</mbox_sha1sum>
	<location>Vancouver, Canada</location>
	<photosurl>http://www.flickr.com/photos/bees/</photosurl> 
	<profileurl>http://www.flickr.com/people/bees/</profileurl> 
	<photos>
		<firstdate>1071510391</firstdate>
		<firstdatetaken>1900-09-02 09:11:24</firstdatetaken>
		<count>449</count>
	</photos>
</person>
참고 : http://www.flickr.com/services/api/flickr.people.getInfo.html
참고 : http://www.flickr.com/services/api/explore/?method=flickr.people.getInfo

person 엔티티의 Attribute로 nsid, iconserver, iconfarm을 제공합니다.
이것을 이용하면 Buddy Icon의 정확한 URL을 만들어 낼 수 있습니다.

하지만 .NET용 Flickr API Kit 소스(이하 FlickrNet)에는 문제가 있어서.
Silverlight에서 사용시 4001 (Image Error)를 유발합니다.


3. FlickNet Problem on Buddy Icon URL

아래는 수정 전 FlickrNet의 Person.cs 소스 일부입니다.

public Uri BuddyIconUrl
{
 get
 {
  if( IconServer == 0 )
   return new Uri("http://www.flickr.com/images/buddyicon.jpg");
  else
    return new Uri(String.Format("http://static.flickr.com/{0}/buddyicons/{1}.jpg", IconServer, UserId));
 }
}

피같은 IconFarm 정보를 사용하지 않고 있습니다. 소스를 아래와 같이 수정합니다.

public Uri BuddyIconUrl
{
 get
 {
  if( IconServer == 0 )
   return new Uri("http://www.flickr.com/images/buddyicon.jpg");
  else
    return new Uri(String.Format("http://farm{0}.static.flickr.com/{1}/buddyicons/{2}.jpg", IconFarm, IconServer, UserId));
 }
}

이제 더 이상 4001 에러를 보지 않아도 됩니다. ^^



FlickrNet 다운 받는 곳
http://www.codeplex.com/Wiki/View.aspx?ProjectName=FlickrNet
현재 2.1.4 Released 버전이 공개되어 있습니다.


이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : 4001 에러, API, flickr, FlickrNet, Silverlight, 실버라이트

코멘트를 남겨 주세요. (Write your message and submit)

[Flickr Finder] Flickr API Key 발급받기

Posted 2008/01/23 00:20 by 길버트

1. Flickr API Key 발급받기

실버라이트에서 Flickr API를 이용하기 위한 첫 단계로 API Key를 발급 받는 과정을
정리해 보았습니다. (29일 세미나 자료로 활용도 해야해서... 꿩먹고 알먹고)


http://www.flickr.com/services/api/keys 에 방문하여 로그인을 합니다.
(yahoo 계정이 없으시면 계정을 먼저 만드시고 로그인 하시면 됩니다.)

사용자 삽입 이미지


Apply for your key online now 링크를 클릭하여 신청 페이지로 이동합니다.

사용자 삽입 이미지
입력란을 정성스럽게 채우고 APPLY 버튼을 누릅니다.

사용자 삽입 이미지
위와 같은 확인 화면이 나오면 Click here를 눌러 계속 진행합니다.

사용자 삽입 이미지

이어서 나오는 양식을 대략 채우고 SAVE CHANGES 버튼을 눌러 저장을 합니다.


사용자 삽입 이미지

이것으로 API key 등록이 끝났습니다.

자 이제 Key를 잘 가지고 있다가 Flickr 관련 어플리케이션을 만들 때 사용하면 됩니다.

이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : API, Flickr Finder, RIA, Silverlight, 실버라이트,

코멘트를 남겨 주세요. (Write your message and submit)

Add Silverlight Link 사용 시의 팁.

Posted 2008/01/23 00:17 by 길버트
Silverlight 어플리케이션을 개발할 때 Cross Domain 문제를 회피하여 디버깅하기 위해서,
ASP.NET 웹 응용프로그램, ASP.NET 웹 서비스 응용프로그램, AJAX 1.0 - Enabled ASP.NET 2.0 웹 응용프로그램 등의
Web 템플릿 프로젝트를 새로 추가하고 [Add Silverlight Link]하여 사용하게 됩니다.

이때, 실버라이트 프로젝트 중,
Silverlight.js, TestPage.html, TestPage.html.js 파일은 수동으로 복사해주곤 하죠?

또, 세 파일 중 어떤 파일이 수정되면 그 파일을 또 다시 복사 해줘야 적용이 되곤했죠?

Silverlight 프로젝트에서 Silverlight.js, TestPage.html, TestPage.html.js 세 파일에 대해 속성의 [빌드 작업] 항목을 내용(Content)으로 설정하시면 편해 집니다.

사용자 삽입 이미지

Build 할 때마다 Silverlight 프로젝트의 세 파일이 Web 프로젝트에 업데이트 될 뿐만 아니라,
'게시'를 할 경우에도 문제없이 함께 게시됩니다. (= 수동으로 복사를 해줄 필요가 없어집니다.)

이미 많은 분들이 알고 계시겠지만, 아직 모르셨던 분들께 도움이 되었으면 좋겠습니다.


이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : AddSilverlightLink, RIA, Silverlight, 실버라이트,

  1. BlogIcon 이과장

    좋은 팁 잘봤습니다. ^^

    | 2008/01/23 09:10 | PERMALINK | EDIT | REPLY |
코멘트를 남겨 주세요. (Write your message and submit)

구현해서 서버에 올려 놓은지는 벌써 2주가 되어갑니다만,
바빠서 포스팅을 못했습니다.

http://shiverlight.net/Demos/FlickrFinder

1. 검색어 자동완성 기능

사용자 삽입 이미지

웹서비스를 이용하여 사용자가 입력하는 검색어들을 DB에 누적시키고,
그것을 기반으로하는 검색어 자동완성기능을 구현해 보았습니다.

사용자 삽입 이미지


2. 해당 사진의 Flickr 사이트의 웹페이지 링크

사용자 삽입 이미지

사진 크게보기를 할 때, 오른쪽에 생기는 아이콘을 클릭하면,
해당 사진의 Detail한 정보를 볼 수 있는 flickr 웹사이트를 새창으로 띄워줍니다.

사용자 삽입 이미지

Favorites 등 재미난 기능을 좀 넣어보려고 했는데,
다른 것 하느라고 시간이 영 안나네요.

이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : Flickr Finder, Silverlight, 실버라이트, 웹서비스, 자동완성, 휴즈플로우

  1. BlogIcon 이과장

    역시 길버트님이 짱입니다요 ㅋ

    | 2008/01/11 10:13 | PERMALINK | EDIT | REPLY |
  2. BlogIcon 길버트

    감사합니다.
    요즘 비밀(?)리에 Boxmile과 재미난 거 만들고 있어요.

    | 2008/01/11 16:01 | PERMALINK | EDIT | REPLY |
  3. 비밀댓글 입니다

    | 2008/01/15 13:36 | PERMALINK | EDIT | REPLY |
코멘트를 남겨 주세요. (Write your message and submit)
Boxmile군이 제작하여 12월 28일 실버라이트 카페에 공개한 Text Dragon을 소개합니다.
아직 beta이며, 계속 개선해 나갈 것입니다.

저는 웹서비스를 이용한 DB연동에만 도움을 주었습니다.
(.Net Framework 2.0 웹서비스를 이용하여 DB와 연동하고 있습니다.)



http://shiverlight.net/Demos/TextDragon/


<TextDragon 방명록에 글 남기는 방법>

1. 아무 여백이나 클릭합니다.

2. 창이 뜨면 이름과 이메일을 입력합니다. (색상선택가능)

3. 다시 아무 여백이나 클릭합니다.

4. 창이 뜨면 남길 메세지를 입력합니다. (색상과 폰트사이즈 선택가능)

5. Text Dragon이 날아다닐 Path를 생성합니다. (마우스 왼쪽 버튼 Click과 Drag 이용)
   시작한 점에 다시 돌아와 끝나도록 폐곡선으로 만들어줍니다.

6. 여백에 클릭하면 확인 취소를 묻는 창이 뜨고 OK를 누르면
   Text Dragon이 생성되어 날아다니기 시작합니다.


-------------------------------------------------------------------------------

사용 방법의 난이도에 비해 프로그램 도움말이 부족하지만 재미있네요. ^^
이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : Silverlight, TextDragon, 방명록, 실버라이트, 휴즈플로우

코멘트를 남겨 주세요. (Write your message and submit)

[엉뚱한실험6] Silverlight & HTTP Referer

Posted 2007/12/26 17:48 by 길버트

사용자는 대체 어느 링크를 타고 우리 웹사이트에 방문하셨을까?
이걸 알려주는 HTTP Referer라는 것이 있죠?

근데 과연 실버라이트 객체에 HtmlPage.Navigate로 구현한 링크를
타고 들어온 사용자로 부터도 HTTP Referer 정보를 얻을 수 있을까요?
이번 실험은 이 궁금증을 해소해 보겠습니다.

일단 제 Linux 웹서버에 PHP로 HTTP Referer와 Browser 정보를
화면에 출력해 주는 페이지를 하나 작성했습니다.

http://twosomeplace.net/test/Referer.php

<style>
 body, td { font-size:12px; }

 .Info { border : 1px solid #E0E0E0;}
 .Info td { padding:5px;border : 1px solid #E0E0E0;}
</style>

<table width="600" class="Info" cellspacing="0">
 <tr>
  <td>Referer</td>
  <td><?=$_SERVER['HTTP_REFERER']?>&nbsp;</td>
 </tr>
 <tr>
  <td>Browser</td>
  <td><?=$_SERVER['HTTP_USER_AGENT']?></td>
 </tr>
</table>

그리고 아래와 같은 실버라이트 페이지를 하나 만들어 보았습니다.

http://shiverlight.net/test/Referer/

사용자 삽입 이미지

Test HTTP Referer라고 쓰여있는 버튼을 누르시거나,
Call Referer.php라고 쓰여있는 HTML Hyper Link를 누르시면,
http://twosomeplace.net/test/Referer.php를 새창으로 띄워서 결과를 확인시켜 줍니다.

(위 링크를 직접 눌러 보시면 이 글에 해당되는 URL이 Referer로 화면에 뜨는 것도 확인하실 수 있으실 겁니다.)


테스트 결과

1. 실버라이트 버튼을 눌렀을 때

사용자 삽입 이미지
Referer는 알 수 없고, Browser 정보는 정상적으로 보입니다.


2. HTML 하이퍼링크를 눌렀을 때

사용자 삽입 이미지
Referer와 Browser 정보 모두가 정상적으로 보입니다.


결론

실버라이트는 흔적(HTTP Referer)을 남기지 않는다...

그렇군요...

이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : HTTP Referer, Silverlight, 실버라이트,

코멘트를 남겨 주세요. (Write your message and submit)

Silverlight와 WebService(.NET 3.5) 연동하기

Posted 2007/12/26 10:35 by 길버트

1. 샘플 프로젝트 만들기

일단 솔루션에 .Net Framework 3.5 기반의 Silverlight Project를 먼저 생성하시고,

사용자 삽입 이미지

이어서 Web프로젝트 형식의 'ASP.NET 웹서비스 응용 프로그램 템플릿 프로젝트를 추가합니다.

사용자 삽입 이미지

WebSvc3_5 프로젝트에 오른쪽 클릭을 하고 'Add Silverlight Link'를 실행합니다.

사용자 삽입 이미지

아래와 같은 창이 뜨면 OK를 누릅니다.

사용자 삽입 이미지

이 과정을 거치고 나면 WebSvc3_5 프로젝트에 Page.xaml과 Silverlight 프로젝트의 빌드 결과물(.dll)들이 참조되게 됩니다.

사용자 삽입 이미지

Silverlight 프로젝트의 Silverlight.js 파일과 TestPage.html (TestPage.html.js파일 포함)파일을
WebSvc3_5 프로젝트에 복사해 줍니다.

WebSvc3_5 프로젝트 이름에 오른쪽 클릭을 하고 '시작 프로젝트로 설정'을 실행합니다.
WebSvc3_5 프로젝트 내의 TestPage.html 파일에 오른쪽 클릭을 하고 '시작 페이지로 설정'을
실행합니다.

위 액션의 의도가 궁금하신 분은 공도님의 포스트

http://gongdo.tistory.com/97 중 '웹 프로젝트와 Silverlight 프로젝트를 함께 디버깅'

파트를 참고하십시오. 안 궁금하신 분은 패스!


솔루션 탐색기 트리에서 Service1.asmx 파일을 더블클릭하여
Service1.asmx.cs 파일을 아래와 같이 편집합니다.

using System;
using System.Data;
using System.Linq;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Xml.Linq;
namespace WebSvc3_5
{
    /// <summary>
    /// Service1의 요약 설명입니다.
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    // ASP.NET AJAX를 사용하여 스크립트에서 이 웹 서비스를 호출하려면 다음 줄의 주석 처리를 제거합니다.
    [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {
        [WebMethod]
        public string HelloWorld()
        {
            return "Happy New Year!";
        }
    }
}

[System.Web.Script.Services.ScriptService]에 적용되어 있던 주석 하나만 풀어주면,
바로 Silverlight의 비하인드 코드를 통해 직접 연동할 수 있는 웹서비스 클래스가 됩니다.

Service1.asmx 파일에 오른쪽 클릭하고 '브라우저로 보기'를 실행하여,
URL을 클립보드에 복사해 둡니다.

저의 경우에는 http://localhost:56997/Service1.asmx 였습니다.
자 그럼 그창을 닫습니다.

주의) 나중에 웹에 게시할 때는 웹서비스가 게시된 웹상의 URL로 웹참조를
변경해 주셔야 합니다.



3. 웹 참조 추가

Silverlight 프로젝트에 오른쪽 클릭을 하고 '웹 참조 추가'를 실행합니다.

사용자 삽입 이미지

1. 클립보드에 복사한 URL을 붙여넣기 하고 '이동' 버튼을 누릅니다.
2. 웹 참조 이름을 변경합니다.
3. 참조 추가 버튼을 누릅니다.

이제 이 실버라이트 프로젝트 내의 모든 비하인드 코드에서 mySvc란 이름으로
웹 서비스에 접근이 가능해졌습니다.


4. 실버라이트 프로젝트에 웹서비스를 참조하는 샘플 코드 구현

웹서비스에서 받아 온 문자열을 화면에 보여 주기 위해 Page.xaml 파일을 Blend에서
조금 변경합니다.

사용자 삽입 이미지

크리스마스에 어울리는 빨간 글씨를 가진 TextBlock을 _tbMessage란 이름으로 추가합니다.

마지막으로 Page.xaml.cs에 손을 댑니다.

public void Page_Loaded(object o, EventArgs e)
{
    // Required to initialize variables
    InitializeComponent();

    // 웹 서비스의 HelloWorld 메서드를 실행하여 가져온 문자열을 화면에 표시
    mySvc.Service1 svc = new mySvc.Service1();
    _tbMessage.Text = svc.HelloWorld();
}


5. 테스트

자 이제 F5를 눌러 실행을 해봅니다.

사용자 삽입 이미지


웹 서비스에서 받아온 문자열이 화면에 잘 표시되는 것을 확인할 수 있었습니다.

이제 재미있고 유익한 웹 서비스를 구현하여 즐기는 일만 남았군요!

감사합니다.


6. 프로젝트 소스


필요하신 분은 다운받으십시오.
이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : .Net Framework 3.5, ajax, Silverlight, WebService연동, 실버라이트,

  1. 이지홍9

    전 add 실버라이트 링크라는 메뉴가 없는데 어떻하죠?
    visual studio 2008에 실버라이트 2.0 입니다.

    | 2008/03/11 14:54 | PERMALINK | EDIT | REPLY |
  2. 이지홍9

    js랑 테스트 페이지가 안생깁니다.
    도와주세요.

    | 2008/03/11 15:04 | PERMALINK | EDIT | REPLY |
  3. BlogIcon 길버트

    제 글은 실버라이트 1.1에 해당하는 내용입니다.

    실버라이트2에서는 프로젝트 생성 시,
    기본 옵션으로 웹어플리케이션 프로젝트를 동시에 생성할 수가 있구요.

    이때 생긴 [프로젝트명]_Web란 이름의 웹어플리케이션 프로젝트 쪽의 파일 구성을 유심히 보시면,
    js랑 테스트 페이지 대신에 [프로젝트명]TestPage.aspx파일과 [프로젝트명]TestPage.html 파일이 생깁니다.
    둘 중 테스트 하고 싶으신 것을 '시작 페이지로 지정'하시고 실행하시면됩니다.

    [프로젝트명]TestPage.aspx에서는 asp:Silverlight 컨트롤에 의해서 실버라이트가 호스팅 되고,
    [프로젝트명]TestPage.html에서는 object 태그에 의해서 실버라이트가 호스팅 되고 있는 것을
    확인하실 수 있습니다.

    실버라이트 2에서는 TestPage.html.js 같은 것이 필요없게 되었습니다.

    | 2008/03/11 18:59 | PERMALINK | EDIT | REPLY |
코멘트를 남겨 주세요. (Write your message and submit)

Silverlight와 WebService(.NET 2.0) 연동하기

Posted 2007/12/25 13:34 by 길버트

1. 서론 (준비사항)

.Net Framework 3.5 기반으로 생성한 WebService와 Silverlight 연동하기는
누워서 떡먹기인데, 웹호스팅 업체들이 .Net Framework 3.5를 지원하는
서비스를 아직 내놓지 않고 있죠? (비싼 돈 내고 서버 호스팅을 하는 수 밖에...)

그래서 현재 시점에서는 .Net Framework 2.0 기반의 WebService와 함께 하는 것이 손쉬운 길입니다.

.Net Frameworks 2.0 기반에서 Silverlight와 연동하기 위해서는 AJAX의 도움이 필요합니다.
일단 Visual Studio 2008은 설치되어있으시다고 가정하면, 다음과 같은 것들을 추가로 설치하셔야 합니다.

- ASP.NET 2.0 AJAX 1.0 Extensions 1.0
- Microsoft ASP.NET 2.0 AJAX Templates for Visual Studio 2008

설치 후 Visual Studio 2008을 구동시켜 새 프로젝트 만들기를 시도해 보면,
Web 프로젝트 형식의 .NET Framework 2.0 용 템플릿에 무엇인가 새로 추가되어 있는 것을
발견하실 수 있습니다.

사용자 삽입 이미지
AJAX 설치 전

사용자 삽입 이미지
AJAX 설치 후

AJAX 1.0-Enabled ASP.NET Web Application이 새로 추가되었군요!


2. 샘플 프로젝트 만들기

일단 솔루션에 .Net Framework 3.5 기반의 Silverlight Project를 먼저 생성하시고,

사용자 삽입 이미지

이어서 .Net Framework 2.0 기반의 'AJAX 1.0-Enabled ASP.NET Web Application' 프로젝트를 하나 추가합니다.

사용자 삽입 이미지

사용자 삽입 이미지

Web Application 프로젝트에 오른쪽 클릭을 하고 'Add Silverlight Link'를 실행합니다.

사용자 삽입 이미지

위와 같은 창이 뜨면 OK를 누릅니다.
이 과정을 거치고 나면 WebSvc2_0 프로젝트에 Page.xaml과 Silverlight 프로젝트의 빌드 결과물(.dll)들이 참조되게 됩니다.

사용자 삽입 이미지

Silverlight 프로젝트의 Silverlight.js 파일과 TestPage.html (TestPage.html.js파일 포함)파일을
AJAX Web Application 프로젝트에 복사해 줍니다.

WebSvc2_0 프로젝트 이름에 오른쪽 클릭을 하고 '시작 프로젝트로 설정'을 실행합니다.
WebSvc2_0 프로젝트 내의 TestPage.html 파일에 오른쪽 클릭을 하고 '시작 페이지로 설정'을
실행합니다.

위 액션의 의도가 궁금하신 분은 공도님의 포스트

http://gongdo.tistory.com/97 중 '웹 프로젝트와 Silverlight 프로젝트를 함께 디버깅'

파트를 참고하십시오. 안 궁금하신 분은 패스!


사용자 삽입 이미지

WebSvc2_0에 오른쪽 클릭을 하고 '추가 - 새 항목'을 통해서,
웹서비스를 하나 추가합니다. 위 그림에서 WebService1.asmx.

솔루션 탐색기 트리에서 WebService1.asmx 파일을 더블클릭하여
WebService1.asmx.cs 파일을 아래와 같이 편집합니다.

using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Web.Script.Services;

namespace WebSvc2_0
{
    /// <summary>
    /// WebService1의 요약 설명입니다.
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    [ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Merry Christmas!";
        }
    }
}


웹서비스 클래스에 [System.Web.Script.Services.ScriptService]가 선언이 되어있어야,
Silverlight의 비하인드 코드를 통해서 직접 연동할 수 있습니다.

WebService1.asmx 파일에 오른쪽 클릭하고 '브라우저로 보기'를 실행하여,
URL을 클립보드에 복사해 둡니다.

저의 경우에는 http://localhost:49573/WebService1.asmx 였습니다.
자 그럼 그창을 닫습니다.

주의) 나중에 웹에 게시할 때는 웹서비스가 게시된 웹상의 URL로 웹참조를
변경해 주셔야 합니다.



3. 웹 참조 추가

Silverlight 프로젝트에 오른쪽 클릭을 하고 '웹 참조 추가'를 실행합니다.

사용자 삽입 이미지

1. 클립보드에 복사한 URL을 붙여넣기 하고 '이동' 버튼을 누릅니다.
2. 웹 참조 이름을 변경합니다.
3. 참조 추가 버튼을 누릅니다.

이제 이 실버라이트 프로젝트 내의 모든 비하인드 코드에서 mySvc란 이름으로
웹 서비스에 접근이 가능해졌습니다.


4. 실버라이트 프로젝트에 웹서비스를 참조하는 샘플 코드 구현

웹서비스에서 받아 온 문자열을 화면에 보여 주기 위해 Page.xaml 파일을 Blend에서
조금 변경합니다.

사용자 삽입 이미지

크리스마스에 어울리는 빨간 글씨를 가진 TextBlock을 _tbMessage란 이름으로 추가합니다.

마지막으로 Page.xaml.cs에 손을 댑니다.

public void Page_Loaded(object o, EventArgs e)
{
    // Required to initialize variables
    InitializeComponent();

    // 웹 서비스의 HelloWorld 메서드를 실행하여 가져온 문자열을 화면에 표시
    mySvc.WebService1 svc = new mySvc.WebService1();
    _tbMessage.Text = svc.HelloWorld();
}


5. 테스트

자 이제 F5를 눌러 실행을 해봅니다.

사용자 삽입 이미지


웹 서비스에서 받아온 문자열이 화면에 잘 표시되는 것을 확인할 수 있었습니다.

이제 재미있고 유익한 웹 서비스를 구현하여 즐기는 일만 남았군요!

감사합니다.


6. 프로젝트 소스


필요하신 분은 다운받으십시오.
이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : .Net Framework 2.0, ajax, Silverlight, WebService연동, 실버라이트,

코멘트를 남겨 주세요. (Write your message and submit)

이번 실험은 이런 생각에서 출발합니다.

createSilverlight 함수의 isWindowless 파라미터를 "true"로 설정한 후,
실버라이트 Page의 Opacity값이나 Background 색상의 Alpha 값을 조정하면,
뒤에 놓인 HTML 엘리먼트들을 배경으로 보이면서 작동이 가능할 것인가?


(구체적으로는 HTML형태로 결과물을 보여주는 이런저런 매쉬업들을 활용하여,
실버라이트만 그 위에 살짜쿵 올려서, 뭔가를 만들 수 있지 않을까...? 하는 생각에서 출발했습니다.)

일단, Silverlight의 isWindowless 파라미터에 대해서는 공도님이 친절하게
정리해 놓은 포스트가 있으니 참고하시면 되겠습니다.

공도님이 정리한 포스트

Page.xaml은 Blend에서 아래와 같이 사이즈 400x300 짜리 디자인으로 준비하였습니다.

사용자 삽입 이미지

Page.xaml.cs에 myButton에 대해 아래 역할을 하는 이벤트를 추가해 주었습니다.

MouseEnter 이벤트에서 Page Canvas의 Opacity를 0으로 변경.
MouseLeave 이벤트에서 Page Canvas의 Opacity를 1로 복원.

TestPage.html은 아래와 같이 준비하였습니다.
Body에는 배경을 깔았습니다. z-index를 통해 div객체를 겹쳐보기 위해서
Hugeflow Logo를 2개 준비하였습니다.

<html xmlns="http://www.w3.org/1999/xhtml" >
<!-- saved from url=(0014)about:internet -->
<head>
    <title>Trying to overlap Divs using CSS (when isWindowless is true)</title>
   
    <script type="text/javascript" src="Silverlight.js"></script>
    <script type="text/javascript" src="TestPage.html.js"></script>
    <style type="text/css">
        img { border:1px solid #000000;}
        body { margin:10px 10px 10px 10px; background-image:url(bg_main.png);}

        .silverlightHost { width:400px;height:300px;}
       
        #Logo1 { position:absolute;left:15px;top:15px;z-index:1;}
        #Logo2 { position:absolute;left:150px;top:15px;z-index:3;}
       
    </style>
</head>

<body>
        <div id="Logo1">
            <a href="
http://hugeflow.com"><img src="HFLogo_snow.jpg" border="0" /></a>
        </div>
        <div id="Logo2">
            <a href="
http://hugeflow.com"><img src="HFLogo_snow.jpg" border="0" /></a>
        </div>

        <div id="SilverlightControlHost" class="silverlightHost" >
        <script type="text/javascript">
            //createSilverlight(); // 살짝 주석처리
        </script>
        </div>   
</body>
</html>

일단 이해를 돕는 그림을 만들기 위해 createSilverlight를 살짝 주석으로 막고 실행시켜 캡쳐하였습니다.

사용자 삽입 이미지

z-index가 효험을 보여 Huge Flow 로고가 2개 겹쳐있는 것을 확인하실 수 있습니다.
여기서 createSilverlight의 주석봉인을 풀어주면 다음과 같이 됩니다.

사용자 삽입 이미지

그럼 이제 TestPage.html.js (실버라이트를 호스트하는 html페이지의 비하인드 코드)에서
isWindowless: "true"를 추가해 줍니다.


function createSilverlight()
{
 Silverlight.createObjectEx({
  source: "Page.xaml",
  parentElement: document.getElementById("SilverlightControlHost"),
  id: "SilverlightControl",
  properties: {
   width: "100%",
   height: "100%",
   version: "1.1",
   isWindowless: "true",
   enableHtmlAccess: "true"
  },
  events: {}
 });
   
 // Give the keyboard focus to the Silverlight control by default
    document.body.onload = function() {
      var silverlightControl = document.getElementById('SilverlightControl');
      if (silverlightControl)
      silverlightControl.focus();
    }

}

그럼 이렇게 됩니다.

사용자 삽입 이미지

여기서 Silverlight 객체를 호스트 하기 위한 Div의 z-index를 2로 주면,
Silverlight 객체가 과연 Hugeflow의 로고 두 개 사이 계층에 껴서,
하나의 로고(z-index = 1)는 Silverlight 객체 아래로 가서 안보이게되고,
다른 하나(z-index = 3)의 Silverlight 객체 위에 그대로 보이게 될까요?

여러분 궁금하지 않으십니까?
그래서 일단 CSS를 수정하였습니다.

<html xmlns="http://www.w3.org/1999/xhtml" >
<!-- saved from url=(0014)about:internet -->
<head>
    <title>Trying to overlap Divs using CSS (when isWindowless is true)</title>
   
    <script type="text/javascript" src="Silverlight.js"></script>
    <script type="text/javascript" src="TestPage.html.js"></script>
    <style type="text/css">
        img { border:1px solid #000000;}
        body { margin:10px 10px 10px 10px; background-image:url(bg_main.png);}
        .silverlightHost { width:400px;height:300px;position:absolute;z-index:2;}
       
        #Logo1 { position:absolute;left:15px;top:15px;z-index:1;}
        #Logo2 { position:absolute;left:150px;top:15px;z-index:3;}       
    </style>
</head>

<body>
        <div id="Logo1">
            <a href="http://hugeflow.com"><img src="HFLogo_snow.jpg" border="0" /></a>
        </div>
        <div id="Logo2">
            <a href="http://hugeflow.com"><img src="HFLogo_snow.jpg" border="0" /></a>
        </div>
        <div id="SilverlightControlHost" class="silverlightHost" >
        <script type="text/javascript">
            createSilverlight();
        </script>
        </div>   
</body>
</html>

겹치게 하기 위해서 position은 absolute로 설정하고, z-index를 2로 설정하였습니다.
결과 보시죠!

사용자 삽입 이미지

무리없이 잘됩니다. ^^;;

그럼 오늘 시험의 하이라이트 Silverlight Page의 Opacity나 Background의 Alpha값을
조정해서 Silverlight 객체 뒤로 숨어버린 Logo 이미지나, 배경을 볼 수 있을까요?
자, 아까부터 출연해서 기다리고 있던 저 크고 검은 버튼에 손을 대보겠습니다.

사용자 삽입 이미지

이런 실망하셨죠?
혹시나 해서 Page.xaml에 가서 Background 물을 빼보고 다시 해보았습니다만,
마찬가지 결과를 보여줍니다.

그럼 방법이 전혀 없느냐?

boxmile이 Silverlight 공식포럼에서 발견하고 저에게 알려준 방법이 있습니다.

포럼원문 : http://silverlight.net/forums/t/6267.aspx

방법이 다음과 같이 간단합니다.

TestPage.html.js의 createSilverlight 함수에 다음 파라미터를 추가하라.
   
isWindowless : "true"
background : "#00FFFFFF"


(각 파라미터 끝에 , 빼먹지 않도록 조심하세요.)

실제 코드에 적용

function createSilverlight()
{
 Silverlight.createObjectEx({
  source: "Page.xaml",
  parentElement: document.getElementById("SilverlightControlHost"),
  id: "SilverlightControl",
  properties: {
   width: "100%",
   height: "100%",
   version: "1.1",
   isWindowless: "true",
   
background: "#00FFFFFF",
   enableHtmlAccess: "true"
  },
  events: {}
 });
   
 // Give the keyboard focus to the Silverlight control by default
    document.body.onload = function() {
      var silverlightControl = document.getElementById('SilverlightControl');
      if (silverlightControl)
      silverlightControl.focus();
    }

}

이런 처방을 한 이후에 Page의 배경색이나 Opacity를 조정해보면,
원하는 대로 동작하는 것을 확인해 보실 수 있습니다.

첫번째로, Page의 배경색이 없는 경우

사용자 삽입 이미지

로고 사이에 찡긴 버튼을 확인하실 수 있습니다.
(좀더 극적인 효과를 위하여, 버튼의 모양/크기/위치를 조정하였습니다.)

두번째로, 배경색을 주고 Alpha 값을 반 정도(128) 감소시킨 경우,

사용자 삽입 이미지

반투명으로 잘 보이는 것을 확인할 수 있었습니다.


부록 1. 한편 Flash에는?

Flash에 보면 유사한 개념으로 wmode 파라미터가 있습니다.
wmode

- opaque : 불투명
- transparent : 투명

opaque로 설정 시 HTML 객체가 Flash 위에 올라올 수 없습니다. 한편, transparent로
설정 시에는 HTML 객체가 Flash 위에 올라오게 할 수도 있고, 배경이 없는 경우 아래에 있는 HTML 객체를 그대로 투과하여 보여 줄 수 있습니다.

공신닷컴 메인페이지를 작업하면서 적용해보니 FireFox 2.x에서 제대로 작동을 안하는 등,
아직 Cross Browsing 문제가 남아있는 것을 확인하였습니다.


긴 실험결과 봐 주셔서 감사합니다.