'Asynchronous'에 해당되는 글 4건
- 2010/04/15 ASP.NET - ICallback을 이용한 JSON 기반의 Javascript Serialization
- 2009/07/13 Silverlight - Network Example 1
- 2009/04/30 Silverlight - Network (2)
- 2009/03/11 sunyruru의 미투데이 - 2009년 3월 11일
ASP.NET - ICallback을 이용한 JSON 기반의 Javascript Serialization

원문 참조 : http://aspalliance.com/1537_ICallback__JSON_Based_JavaScript_Serialization.1
* 4월 19일 추가 내용
프로젝트 기반은 .NET Framework 3.5 프로젝트로 설정하고 진행하셔야 합니다.
그리고 제가 테스트해 본 소스도 첨부합니다.
예제 소스 파일 다운로드 :
아직 테스트 해보지는 않은 코드이지만 흥미로운 내용이네요~
별다른 라이브러리를 사용하지 않고 ICallback을 이용해서 Javascript Serialization을 JSON Object 형식으로 처리할 수 있는 방법이니깐요.
먼저 Page나 Controll 클래스에서 System.Web.UI.ICallbackEventHandler를 Implement 해야한다고 합니다.
아래 RaiseCallbackEvent 메소드가 자바스크립트 함수를 호출하게 되고요.
RaiseCallbackEvent method invoke through JavaScript function
public void RaiseCallbackEvent(string eventArgument)
{
//to do code here
}
RaiseCallbackEvent가 완료되면 알아서 GetCallbackResult가 호출되도록 하고요.
GetCallbackResult method invokes itself when the processing of RaiseCallbackEvent method is completed.
public string GetCallbackResult()
{
return "";
}
이제 Page_Load나 Page_Init 부분에서 사용자 스크립트를 등록합니다. 'CallServer' 형식으로 아래 예제는 등록하고 있네요.
해당 스크립트에선 CallbackEventReference 를 가져가니 서버측을 호출하도록 되어있죠.
이렇게 하면 C/S 간의 상호 호출되는 부분이 완성되는 듯 합니다.
protected void Page_Load(object sender, EventArgs e)
{
ClientScriptManager scriptMgr = Page.ClientScript;
String cbReference = scriptMgr.GetCallbackEventReference(this, "arg",
"ReceiveServerData", "");
String callbackScript = "function CallServer(arg, context) {" + cbReference + "; }";
scriptMgr.RegisterClientScriptBlock(this.GetType(),"CallServer", callbackScript, true);
}
이제 사용자 쪽의 스크립트를 등록합니다.
버튼을 클릭하면 CallSrv를 호출하고 CallServer는 서버측 메소드를 호출해 결과값은 ReceiveServerData를 통해 받도록 되어 있죠.
<script language=javascript type=text/javascript>
function ReceiveServerData(arg, context)
{
alert(arg); //just to show output
}
function CallSrv()
{
CallServer('get customer', '');
}
</script>
<input type="button" value="get customer" onclick="CallSrv()" />
이제 서버측에서 customer 형식에 대한 정의가 필요하겠죠. 아래와 같은 JAVA에서 보면 Beans 와 같은 C# 에서의 클래스 하나를 정의합니다.
public class Customer
{
public string Name;
public int Age;
}
이제 핵심적으로 RaiseCallbackEvent 를 정의하는데요.
이 부분이 가장 핵심인 것 같네요.
System.Web.Script.Serialization.JavaScriptSerializer
를 사용하고 있고, 이를 통해서 JSON 형식으로 Object를 반환하도록 해줍니다.
C# 에서의 Class Object (Java로 보면 Beans) 형식을 JSON 형식으로 변수로 받으면
Javascript에서도 객체 형식으로 바로 사용할 수 있게 되겟네요
public void RaiseCallbackEvent(string eventArgument)
{
//populate Customer object to return
Customer customer = new Customer();
customer.Name = "Muhammad Adnan";
customer.Age = 24;
//javascript serialization of Customer object
System.Web.Script.Serialization.JavaScriptSerializer jss;
jss = new System.Web.Script.Serialization.JavaScriptSerializer();
//stringbuilder to contain serialized customer object
System.Text.StringBuilder sbCustomer = new System.Text.StringBuilder();
jss.Serialize(customer, sbCustomer);
jsonResult = sbCustomer.ToString();
}
public string GetCallbackResult()
{
return jsonResult;
}
아래 메시지는 샘플로 출력해본 내용입니다.
별 다른 라이브러리를 사용하거나 하지 않고,
페이지의 PostBack이 일어나거나 페이지가 Refresh 되지 않고 데이터 처리하는 내용으로 아주 좋은 활용이 되겠네요 ^ ^
'.NET > ASP.NET' 카테고리의 다른 글
| ASP.NET - ICallback을 이용한 JSON 기반의 Javascript Serialization (0) | 2010/04/15 |
|---|---|
| web.config 암호화 - Encrypt Configuration Sections in ASP.NET 2.0 Using RSA (0) | 2010/04/12 |
| ASP.NET Layout 각 폴더 별 설명 (0) | 2010/04/05 |
| ASP.NET 2.0 AJAX - UpdateProgress (0) | 2009/10/11 |
| A .NET library for OpenFlashChart control (0) | 2009/03/29 |
| iTunes Data Grid Skin for ASP.NET GridView, ListView Control (0) | 2009/02/02 |
자료제공 : http://hugeflow.com/
이전 내용에 Silverlight의 네트워크에 작성한 내용이 있다.
2009/04/30 - [.NET/SilverLight] - Silverlight - Network
이 내용을 바탕으로 다음의 소스코드를 작성하였으므로 내용의 이해가 조금 부족하면 확인하시길...
예제는 프로젝트명 WebClientTest로 하였고,
먼저 Page.xaml 코드는
<UserControl x:Class="WebClientTest.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="Auto" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="500" d:DesignHeight="418">
<Grid x:Name="LayoutRoot" Background="White"><TextBox Height="47" Margin="8,8,100,0" VerticalAlignment="Top" Text="http://hugeflow.com/sample.xml" TextWrapping="Wrap" x:Name="tboxAddress"/>
<Button HorizontalAlignment="Right" Margin="0,8,8.192,0" VerticalAlignment="Top" Content="Get" Width="88" Height="47" x:Name="buttonGet" Click="buttonGet_Click"/>
<TextBlock Margin="8,59,8,8" Text="" TextWrapping="Wrap" x:Name="tbOutput"/></Grid>
</UserControl>
다음으로 C# 코드
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;namespace WebClientTest
{
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
}private void buttonGet_Click(object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(tboxAddress.Text) == true)
{
return;
}try
{
WebClient wc = new WebClient();
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
wc.DownloadStringAsync(new Uri(tboxAddress.Text, UriKind.Absolute));
}
catch (Exception ex)
{
tbOutput.Text = ex.Message;
throw;
}
}void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Cancelled == true)
{
tbOutput.Text = "취소되었습니다.";
return;
}if (e.Error != null)
{
if (string.IsNullOrEmpty(e.Error.Message) == false)
{
tbOutput.Text = e.Error.Message;
}
else
{
tbOutput.Text = e.Error.ToString();
}
return;
}tbOutput.Text = e.Result;
}
}
}
'.NET > Silverlight' 카테고리의 다른 글
| Silverlight + Expression = Visual Kitchen (0) | 2009/07/16 |
|---|---|
| Silverlight - Network Sample 2 (0) | 2009/07/15 |
| Silverlight - Network Example 1 (0) | 2009/07/13 |
| Silverlight – Custom control (0) | 2009/07/03 |
| Silverlight Custom control (0) | 2009/06/23 |
| Silverlight – bubbling events (2) | 2009/05/18 |
자료 출처 : http://hugeflow.com/
실버라이트 2.0에는 동기방식의 통신은 없애고 비동기 통신만 남겨두었다.
이 방식을 사용하기에 WebClient와 WebRequest 두가지를 사용할 수 있는데.
WebClient가 약간 더 코드가 간결하고 WebRequest는 어렵다. 하지만 크게 어려운 것은 아니다.
다음의 기본 사용 예로 설명을 대신하도록 한다.
WebClient
WebClient wc = new WebClient();
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
wc.DownloadStringAsync(new Uri("http://hugeflow.com/sample.xml", UriKind.RelativeOrAbsolute));
void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
string result = e.Result;
}
HttpWebRequest
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri("http://hugeflow.com/sample.xml", UriKind.Absolute));
request.BeginGetRequestStream(new AsyncCallback(ReadCallback), request);
private void ReadCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string result = reader.ReadToEnd();
}
}
'.NET > Silverlight' 카테고리의 다른 글
| Silverlight - Access HTML document (0) | 2009/05/07 |
|---|---|
| Silverlight - Access managed code form javascript (0) | 2009/05/05 |
| Silverlight - Network (2) | 2009/04/30 |
| Silverlight domain access control (0) | 2009/04/28 |
| REMIX08 RIA, UX의 세계 (0) | 2008/06/16 |
| Programming Silverlight with JavaScript (0) | 2008/05/28 |
- HTML for YES-SCRIPT 흠 그랬군요 NOSCRIPT 말고 반대도 가능하군요..2009-03-10 09:16:32
- Asynchronous Method Invocation이라는 글로 비동기 호출을 위해 Delegate를 사용하는 적절한 예가 있네요. 연구해서 제 개인 블로그로 포스팅 해야겟네요. 비동기 메소드 호출에 대해 관심있으시면 꼭 보세요~! 단 C#.NET입니다.2009-03-11 01:57:58
- C# Coding Standards and Best Programming Practices 간단히 말해 C# 코딩 스타일 가이드가 되겠습니다. 영문 버전으로 유명한 글인데 한글로 번역된 것이 있었네요. 알고 있는 내용이지만, 그래도 가끔씩은 봐줄만 합니다. ㅎㅎ2009-03-11 02:21:23
이 글은 sunyruru님의 2009년 3월 10일에서 2009년 3월 11일까지의 미투데이 내용입니다.
'FunFun' 카테고리의 다른 글
| sunyruru의 미투데이 - 2009년 3월 12일 (0) | 2009/03/13 |
|---|---|
| sunyruru의 미투데이 - 2009년 3월 11일 (0) | 2009/03/12 |
| sunyruru의 미투데이 - 2009년 3월 11일 (0) | 2009/03/11 |
| sunyruru의 미투데이 - 2009년 3월 5일 (0) | 2009/03/06 |
| sunyruru의 미투데이 - 2009년 2월 27일 (0) | 2009/02/28 |
| sunyruru의 미투데이 - 2009년 2월 20일 (0) | 2009/02/21 |
JSON_ICallbackEventHandler.zip



Prev



