GSI

24 시즌 7!!

내 일상 2009. 1. 30. 02:24 |


좀 늦은감 있지만 난 24 미드가 참 좋다.

24시간을 한시간씩 분할해서 한편씩 만들어낸 아이디어도 높이 살만하다 ^^
한주 한주 건담 더블오와 함께 미드 24시 시즌 7에 빠져 보아요 ^^
Posted by gsi
:


저번 강좌 까지 해서 DB 만들고, 웹 서비스 까지 기본으로 만들어 봤습니다.
여기서 해볼건 실버라이트 프로젝트에 웹 서비스로 등록 해 놓은 서비스를 추가 하고 바인딩 하는걸 해볼께요.

우선 기본 코드를 작성 합니다.
-- page.xaml--
<UserControl x:Class="TestBoard.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="400" Height="300">
    <UserControl.Resources>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition Height="0.852*"/>
            <RowDefinition Height="0.148*"/>
        </Grid.RowDefinitions>
        <ListBox Width="Auto" Margin="2,2,2,2" x:Name="boardList" Grid.Row="1"  />
        <Button HorizontalAlignment="Left" Margin="2,2,0,2" Width="100" Content="Load Test" Click="Button_Click" />
        <TextBox Margin="2,8,146,8" Grid.Row="2" Text="TextBox" TextWrapping="Wrap" d:LayoutOverrides="Height" x:Name="TextValue"/>
        <Button HorizontalAlignment="Right" Margin="0,8,40,8" Width="102" Grid.Row="2" Content="Input" Click="Input_Click"/>
    </Grid>
</UserControl>
-- page.cs--
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;
namespace basicBoard01
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }

        public void Read2()
        {
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
        }

        private void Input_Click(object sender, RoutedEventArgs e)
        {
        }
    }
}


위의 기본 코드는 아래의 화면처름 나오게 됩니다.

이제 작업을 시작해 볼께요.

서비스 참조 추가를 통해서 웹서비스를 게시한 주소를 추가한 다음에 참조를 추가 합니다.


추가한 다음에 다음과 같이 구성해 봤습니다.
"Input" 버튼을 누르면 TextBox의 값이 웹 서비스 메소드를 통해서 DB에 저장되고 완료된 후 메소드가 호출되면 ListBox에 해당 DB 리스트 정보가 보이도록 해봤습니다.

"Input" 버튼의 Click 이벤트 메소드에 아래와 같이 작성합니다.

        private void Input_Click(object sender, RoutedEventArgs e)
        {
            boardService.Service1SoapClient client =
                new basicBoard01.boardService.Service1SoapClient();

            client.AddValueCompleted += new EventHandler<basicBoard01.boardService.AddValueCompletedEventArgs>(client_AddValueCompleted);
            client.AddValueAsync(TextValue.Text);
        }

위의 코드의 내용은 웹 서비스의 Client 객체를 생성하고 웹 서비스에서 값을 추가 하기 위해서 AddValue(string value) 에 해당하는 메소드 AddValueAsync()를 호출해 줍니다.
이때 완료된 후 콜백 형태로 받기 위해서 AddValueCompleted() 라는 이벤트 함수를 하나 추가 합니다.

        void client_AddValueCompleted(object sender, basicBoard01.boardService.AddValueCompletedEventArgs e)
        {
            Read2();
        }

위와 같이 값을 DB에 기록한 후 완료가 되면 Read2()를 호출해서 값을 ListBox에 뿌리도록 했습니다.

        public void Read2()
        {
            boardService.Service1SoapClient client =
                new basicBoard01.boardService.Service1SoapClient();

            client.GetListCompleted += new EventHandler<basicBoard01.boardService.GetListCompletedEventArgs>(client_GetListCompleted);

            client.GetListAsync();
        }


마무리...
조금 장황하게 설명을 해봤지만 역시나 좀 두서가 없네요 ^^.
우선 확인되는 부분은 웹 서비스에서 AddValue, GetList 등의 메소드를 만들어 놓고 나서
웹 서비스를 참조 추가를 해서 보게 되면 위와 같이 항상 두개의 메소드가 생성 됩니다.

GetList 인 경우를 보게 되면 리턴만 받는것이기 때문에 GetListAsync() 라는 메소드만 호출하면 됩니다.
이때 호출후 리턴되는 데이터를 받는건 GetListCompleted 라는 이벤트 함수가 담당 하게 됩니다.

AddValue 인 경우를 보게 되면 리턴도 받지만 값을 인자로 받게 되는데요 AddValueAsync(TextValue.Text) 와 같이 해당 스트링 값을 입력 할 수 있게 됩니다.
이때도 AddValueCompleted 를 통해서 결과를 확인할 수 있습니다. 에러가 났는지 정상인지를 판단할 수 있다고 보여 집니다.

잘 적지는 못했지만 실버라이트에서 웹 서비스를 통해서 바인딩 하는 부분에서는 조금 접근한듯 합니다.
조금이나마 도움이 되면 좋겠네요 ^^.

지적질, 질문질 다 환영해요 ^^

Posted by gsi
:


step 1에서 기본 프로젝트를 생성 했습니다.
DB 테이블도 생성 했구요.
이제 할일은 실버라이트 프로젝트랑 DB를 연결 시켜줄 웹 서비스를 구성하는 일입니다.

웹 서비스 제작

  1. 웹 서비스 프로젝트 생성
    1. Visual C# > Web > ASP.NET 웹 서비스 응용 프로그램 을 누릅니다.
    2. 이름은 boardService로 정했습니다.
    3. 아래와 같은 프로젝트가 하나 생성 됩니다.
      이제 프로젝트가 만들어 졌으니 DB를 가져 오는 부분을 추가하고 DB 내용을 담아서 실버라이트로 넘기기 위해서 클래스를 하나 제작 합니다.
  2. DB 바인딩
    1. 데이터 집합 을 하나 생성합니다. 이름은 "dsBoard"로 정했습니다.
    2. DB 를 바인딩 하기 위해서 저 같은 경우는 서버 탐색기를 이용 합니다.
      서버 탐색기 창에서 이전 강좌에서 만들어 놓은 board 데이터 베이스를 바인딩 합니다.
      ( 이 부분 설명은 우선 생략 할께요.)
    3. 위의 memo 테이블을 dsBoard.xsd 파일의 화면으로 드래그 해서 놓으면 테이블 내용이 포함됩니다.
  3. Data.cs 클래스 파일 생성
    1. 이제 DB 연결이 준비 되었으니 위의 데이터를 받아 들일 클래스를 하나 제작했습니다.
      이름은 Data.cs 파일로 클래스 파일을 준비 하구요.
      내용은 아래와 같이 Value를 프로퍼티로 구성했어요.
  4. 웹 서비스로 노출할 메소드를 정의 하고 아래와 같이 코드를 추가 했습니다.
    1. 메소드는 리스트를 리턴해 주는 것과 해당 값을 입력 받는 메소드를 정의하고 아래와 같이 코드를 추가 했습니다.

       using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Web;
      using System.Web.Services;

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

              [WebMethod]
              public List<Data> GetList()
              {
                  List<Data> datas = new List<Data>();

                  dsBoardTableAdapters.memoTableAdapter adapter = new boardService.dsBoardTableAdapters.memoTableAdapter();
                  dsBoard.memoDataTable table = new dsBoard.memoDataTable();

                  adapter.Fill(table);

                  foreach (dsBoard.memoRow row in table.Rows)
                  {
                      datas.Add(new Data(row.value.ToString()));
                  }

                  return datas;
              }

              [WebMethod]
              public bool AddValue(string value)
              {
                  try
                  {
                      dsBoardTableAdapters.memoTableAdapter adapter = new boardService.dsBoardTableAdapters.memoTableAdapter();
                      adapter.Insert(value);
                  }
                  catch (Exception ex)
                  {
                      return false;
                  }
                  return true;
              }
          }
      }

위와 같이 구성하고 localhost에 게시를 해서 하나 등록을 해 놨습니다.
이제 다음 강좌에서는 실버라이트에서 화면을 구성하고, 데이터를 연동하는 곳을 해볼께요.
위의 웹 서비스를 테스트 하고 하는 부분들은 설명이 좀 길어 질거 같아서 추가를 하지 않았습니다.
이 부분은 웹 서비스 관련 책에 많이 나오기 때문에 생략 했습니다.

Posted by gsi
:

실버라이트와 웹 서비스를 연동해서 DB의 값을 바인딩 하는 부분을 한번 해보고 있습니다.
블랜드나 기타 XAML에서 바인딩 하는건 사실 잘 못하겠구요 ^^
그래서 비하인드 코드에서 바인딩 하는 것을 테스트 해보았습니다.

주제 : 기본 프로젝트 생성, DB 테이블 생성

  1. 프로젝트 생성
    1. Visual C#>Silverlight>Silverlight 응용 프로그램 을 클릭한다.
    2. 테스트를 위해서 "솔루션에 Silverlight를 호스팅할 새 ASP.NET 웹 프로젝트 추가" 를 선택한다.
    3. 두개의 프로젝트가 생겼다. 대충 봐도 하나는 기존 WPF 형태의 프로젝트이고, 다른 하나는 웹 페이지를 표시하는거 같다.
    4. 이제 준비 작업은 끝났으니 작업을 시작해 볼께요.
  2. DB 테이블 생성
    1. DB 테이블 생성

      - 데이터 베이스 이름은 "board"로 정했고, "테이블 이름은 "memo"라고 정했다.
      - 그리고 idx 은 인덱스를 의미 하며, 1씩 증가 하도록 설정하였다.
      - 이 부분은 다 알고 있다고 가정하고 그냥 DB 부분은 스킵 ^^
Posted by gsi
:


글라스 느낌에 반짝이는 버튼 이미지가 좋다.
그래서 샘플을 보고 대충 만들어 봤다.

주변 배경이나 색상에 대해서는 아직까지 조화를 이루는 건 잘 모르겠다.

Posted by gsi
: