Beberapa hari yg lalu, saya ingin membuat suatu service yg menggunakan .NET 4.0 dan PoX (Plain-Old-XML).
Dulu di jaman VS2008 saya ingat di .svc ditambah “webHttpBinding” untuk endpoint binding, dan class ditambah atribut “[WebGet]” maka kita sudah bisa menjadikan service kita untuk mengembalikan PoX.
Ah, tapi di VS2010 sepertinya tidak bisa lagi. Setelah iseng-iseng cari template, ternyata memang Visual Studio 2010 tidak lagi menggunakan .SVC untuk WCF REST Services!
How to Get WCF REST .NET 4.0 Template:
Berikut cara mendapatkan template tersebut:

Kemudian pilih WCF REST Service Template .NET 4.0 CSharp
No more SVC!
Perhatikan sudah tidak ada lagi file .svc :
Dan jika dilihat di file Global.asax.cs, kode-kode routing ini sepertinya familiar :)
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)));
}
No More Interface!
Dan tidak ada lagi Interface yang harus di-define sebagai kontrak lalu di-implement :)
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
// NOTE: If the service is renamed, remember to update the global.asax.cs file
public class Service1
{
[WebGet(UriTemplate = "")]
public List<SampleItem> GetCollection()
{
// TODO: Replace the current implementation to return a collection of SampleItem instances
return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } };
}
Untuk mengetahui cara menggunakannya, tidak ada lagi Metadata MEX yang perlu diakses, cukup dengan /NamaService/help :
Dan disini juga terlihat contoh response dalam bentuk PoX maupun JSON untuk membantu membuat service consumer:
Why this style instead of the old .NET 3.5 .SVC + Interface style?
Karena service consumer saya adalah Blackberry, iPhone, iPad, Android (dan mungkin Nokia sometime if we have the time)… dan sepertinya dengan menyediakan JSON atau Plain Old Xml akan lebih platform-independent.
Dari Android langsung bisa menggunakan JSONObject dan dari iPhone langsung bisa menggunakan NSXMLParser