Silverlight WebService 연동 step3
Silverlight 2009. 1. 30. 01:56 |저번 강좌 까지 해서 DB 만들고, 웹 서비스 까지 기본으로 만들어 봤습니다.
여기서 해볼건 실버라이트 프로젝트에 웹 서비스로 등록 해 놓은 서비스를 추가 하고 바인딩 하는걸 해볼께요.
우선 기본 코드를 작성 합니다.
-- page.xaml--
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>
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 이벤트 메소드에 아래와 같이 작성합니다.
{
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() 라는 이벤트 함수를 하나 추가 합니다.
{
Read2();
}
위와 같이 값을 DB에 기록한 후 완료가 되면 Read2()를 호출해서 값을 ListBox에 뿌리도록 했습니다.
{
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 를 통해서 결과를 확인할 수 있습니다. 에러가 났는지 정상인지를 판단할 수 있다고 보여 집니다.
잘 적지는 못했지만 실버라이트에서 웹 서비스를 통해서 바인딩 하는 부분에서는 조금 접근한듯 합니다.
조금이나마 도움이 되면 좋겠네요 ^^.
지적질, 질문질 다 환영해요 ^^