자 Rest Service를 만들어 보자
RestService의 최대강점은 멀티 플랫폼할때 좋다는거다..
인자도 그냥 URL형식으로 Get,Post 방법으로 보내면 되고 그렇게 되면 언어나 플랫폼에 상관없이
쓸수 있는 아주 편한 진정한 RIA 서비스가 된다.
첫번째
new-project 해서 새로운 프로젝트를 만들고
Online Templates로 간다.. 아마 비쥬얼 스튜디오 2010을 깔았다면 그냥 wcf service가 있을것이다.
하지만 우리는 WCF REST Service를 만들것이기때문에 online Template으로 가서 프로젝트를 만든다.
만든뒤에
Service1.cs가 보일것이다.
물론 이걸써도 돼지만 새롭게 만드는것도 나쁘지 않다.
나는 윈폰에서 쓸 Notification Server를 만들꺼기때문에 Notifications.cs란 class를 새로 만들었다.
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class Notifications
{
private static List<Uri> subscribers = new List<Uri>();
private static object obj = new object();
[WebInvoke(UriTemplate = "register?uri={uri}", ResponseFormat = WebMessageFormat.Json, Method = "GET")]
public void Register(string uri)
{
// TODO: Return the instance of SampleItem with the given id
Uri channelUri = new Uri(uri, UriKind.Absolute);
Subscribe(channelUri);
}
그리고 클래스위에 ServiceContract를 정의 하였으며
저렇게 메소드를 만들어서 인자를 받게 만들었다..
그리고 중요한 Global.aspx.cs에서
private void RegisterRoutes()
{
// Edit the base address of Service1 by replacing the "Service1" string below
RouteTable.Routes.Add(new ServiceRoute("Service1", new WebServiceHostFactory(), typeof(Service1)));
RouteTable.Routes.Add(new ServiceRoute("Notifications", new WebServiceHostFactory(), typeof(Notifications)));
}
이렇게 추가하고 컴파일한후
http://localhost:19976/notifications
컴파일 뒤에 notifications를 붙여서 접속하면 접속이 잘된다.
이제 머 메소드를 붙여 넣든 마음대로 요리하면 된다.
아참 이 Registor 메소드를 부르는쪽에서는 이렇게 호출한다.
/// <summary>
/// MS에서 받아온 url을 서버(WCF Service)에 보낸다.
/// </summary>
private void SubscribeToService()
{
string baseUri = "http://localhost:19976/Notifications/Register?uri={0}";
string theUri = String.Format(baseUri, httpChannel.ChannelUri.ToString());
WebClient client = new WebClient();
client.DownloadStringCompleted += (s, e) =>
{
if (e.Error == null)
{
Dispatcher.BeginInvoke(() => UpdateStatus("Registration Success"));
}
else
{
Dispatcher.BeginInvoke(() => UpdateStatus(e.Error.Message));
}
};
client.DownloadStringAsync(new Uri(theUri));
}
쉽다.
'wcf' 카테고리의 다른 글
[WCF] WCF Rest 에서 Image File Upload 하기 (2) | 2011.06.16 |
---|---|
[wcf] c#에서 프로시저 실행하기 (0) | 2011.05.31 |
[wcf] WCF 서비스 인스턴스 관리(session Mode에 관해서) (0) | 2009.09.17 |
[wcf] 파일 전송 기능 정리한거 (0) | 2009.07.31 |
wcf설명 (0) | 2009.07.31 |