This Blog

Syndication

News

Awards

Microsoft MVP Logo
Grab this badge here!

Certificates

Transcript ID#: 6724122
Brainbench ASP.NET Certificate
 
Brainbench ASP.NET 2.0 Certificate
 
Brainbench .NET Framework 2.0 Certificate

Ahmad Masykur

var myObject = { "languages" : [ "C#", "VB.NET", "ASP.NET", "Javascript", "SDCC", "Assembler" ] }; //

Invoke ASP.NET WebService yang Menggunakan Authentikasi NTLM dari WCF Client

Ketika kita membuat sebuah applikasi dengan .NET Framework 3.5, untuk mengakses sebuah ASP.NET WebService tidak ada pilihan lain selain WCF Client. Dalam IDE Visual Studio tidak lagi terdapat menu Add WebReference sebagaimana jika menggunakan target Framework 2.0. Padahal kita harus mengkonsumsi service aplikasi lama yang sudah berjalan dengan baik. Tidak mungkin untuk membuat WCF service baru untuk kebutuhan applikasi baru tersebut. Pengaksesan WebService tidak ada masalah selama dapat digunakan tanpa autentikasi. Masalah terjadi ketika service membutuhkan autentikasi seperti Windows, kerberos atau NTLM.

Pada sebuah Web Service yang menggunakan impersonate user untuk melakukan task tertentu, pemanggilan service tidak semudah yang tanpa impersonate. Jika dalam service membutuhkan hak akses tertentu terhadap client dan ternyata impersonation tidak didapatkan dalam pemanggilans service, maka service tersebut tidak dapat berjalan sebagaimana mestinya (access denied). Untuk mengatasi masalah tersebut kita harus passing credential dari client ke service. Berikut adalah baris kode untuk memanggil service dengan melempar credential ke server.

EndpointAddress endpointAddress = new EndpointAddress(configuration.ServiceUrl); BasicHttpBinding basicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly); basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm; WorkflowServicesSoapClient service = new WorkflowServicesSoapClient(basicHttpBinding, endpointAddress); service.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; service.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; service.ClientCredentials.Windows.AllowNtlm = true; service.Submit(data);

Berikut penjelasan contoh kode di atas.

  1. Baris pertama digunakan untuk membuat EndpointAddress berdasarkan Url yang diambil dari konfigurasi.
  2. Baris kedua untuk membuat BasicHttpBinding dengan menentukan security mode yang digunakan adalah TransportCredentialOnly. Dengan security mode ini, authentikasi didasarkan pada protokol HTTP saja.
  3. Baris ketiga digunakan untuk menentukan security binding menggunakan NTLM.
  4. Baris ke empat adalah deklarasi service dengan binding dan endpoint yang ditentukan sebelumnya (baris 1-3).
  5. Baris ke lima untuk meneruskan informasi credential client ke service.
  6. Baris ke enam untuk menentukan bahwa credential client akan digunakan untuk impersonate.
  7. Baris ke tujuh memungkinkan service menggunakan autentikasi NTLM.
  8. Dan terakhir adalah baris untuk men-invoke service.

Demikian sedikit sharing pengalaman untuk mengkonsumsi ASP.NET WebService dari WCF Client. Semoga bermanfaat.

Share this post: | | | |
Published Aug 27 2009, 07:31 PM by cahnom
Filed under: ,

Comments

 

ekasinggih said:

bukannya msh bisa add web reference mas.. klo ga slh ada di : add service reference >> advance >> add web reference

August 28, 2009 5:37 PM