Melihat dan Modifikasi XML SOAP WCF Web Service

Di projek terakhir, saya mendapat tugas membuat program untuk melakukan signing terhadap request ke web service. Selain itu ada permintaan agar XML SOAP request yang telah di signing dan XML SOAP response dari web service disimpan ke dalam database untuk keperluan audit. Ketika melakukan invoke ke web service, tidak ada property yang menjelaskan struktur/bentuk dari XML SOAP nya. Lalu bagaimana cara mendapatkan XML SOAP yang dikirim maupun yang diterima dari web service?

Setelah beberapa hari konsultasi ke simbah google, saya mendapat pencerahan. Untuk mendapatkan XML SOAP dari webservice, kita perlu mengimplementasikan 2 interface, IClientMessageInspector dan IEndPointBehavior.

IClientMessageInspector
Interface ini mempunyai dua method ‘BeforeSendRequest’ dan ‘AfterReceiveReply’. Kedua method ini memberi kita akses ke SOAP request maupun response.

using System;
using System.ServiceModel;
using System.ServiceModel.Channels;

public class MySoapServiceInspector : IClientMessageInspector
{
     public void AfterReceiveReply(ref Message reply, object correlationState)
     {
       // SOAP yang dikirim (response) dari webservice diterima disini
       // SOAP bisa di periksa dan di modifikasi disini
     }

     public object BeforeSendRequest(ref Message request, IClientChannel channel)
     {
        // SOAP yang akan dikirim ke webservice
        // bisa di periksa dan dimodifikasi disini
     }
}

IEndPointBehavior
Untuk menggunakan class inspector diatas kita perlu membuat class yang mengimplementasikan IEndPointBehavior.
Interface ini mempunyai 4 method, tapi hanya method ‘ApplyClientBahavior’ yang kita gunakan. Sedangkan tiga method lainnya bisa kita kosongkan.

using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;

public class MySoapInspectorBehavior : IEndpointBehavior
{
     public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
     {
          clientRuntime.MessageInspectors.Add(new MySoapServiceInspector());
     }
}

Untuk menggunakan class diatas, kita perlu inisiasi di endpoint ketika mengakses webservice. Misal webservice yang kita akses menggunakan nama default dari WCF

ServiceReference1.Service1Client client = new ServiceReference1.Service1Client(); 
client.Endpoint.Behaviors.Add(new MySoapInspectorBehavior()); 
client.GetData();

Jadi dengan cara diatas kita bisa melakukan sesuatu sebelum SOAP request dikirim ke webservice, misal melakukan signing, menambahkan digital signature, menambahkan canonicalize algoritm dsb. Atau memeriksa otentifikasi dari SOAP response yang dikirim dari webservice.

Semoga bermanfaat
Happy coding

About Yuniar

Penulis sekarang lebih banyak bekerja menggunakan teknologi Microsoft .NET secara umum dan TIDAK lagi menggunakan aplikasi MapXtreme.net dari MapInfo. Karena itu mohon maaf, jika pertanyaan-pertanyaan mengenai MapXtreme sudah tidak bisa saya jawab lagi.

Posted on 5 Juli 2012, in .NET, WCF and tagged , , , , , , , . Bookmark the permalink. Tinggalkan komentar.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: