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));
}
CoworkerSearchService Mybatis.zip