Bagikan melalui


Mengubah Antarmuka yang Ada

Jika memungkinkan, terapkan antarmuka baru untuk aplikasi Anda, daripada membuat perubahan pada yang sudah ada. Jika Anda tidak dapat menghindari perubahan antarmuka yang ada, gunakan jenis data baru hanya dalam metode baru. Memperkenalkan jenis data baru atau memodifikasi jenis yang ada adalah sumber masalah ketidaksesuaian yang paling umum. Model run-time RPC mengasumsikan bahwa aplikasi penerima tahu tentang jenis data yang diterimanya, sehingga data dimasukkan ke kabel tanpa deskripsi data generik. Ketika penerima mengharapkan jenis data yang berbeda dari apa yang telah diletakkan pengirim pada kawat, stub menimbulkan pengecualian (atau transmisi gagal dengan cara lain yang kurang anggun).

Antarmuka RPC ditentukan oleh UUID-nya dan nomor versi utama dan minornya. Ketika Anda mengubah antarmuka yang ada, Anda harus menambahkan metode baru di akhir antarmuka dan mengubah nomor versi minor. Jika Anda menambahkan metode di tempat lain atau membuat perubahan lain pada antarmuka, Anda juga perlu mengubah nomor versi utama.

Secara realistis, ada kalanya Anda tidak dapat mengubah bahkan nomor versi minor, karena klien baru tidak akan dapat berkomunikasi dengan server lama dan Anda tidak dapat memperbarui server. Run time RPC menimbulkan pengecualian, RPC_S_PROCNUM_OUT_OF_RANGE, ketika klien memanggil metode di luar yang ditentukan untuk antarmukanya dengan server. Solusinya adalah membiarkan nomor versi tidak berubah dan menulis kode klien Anda untuk menangani pengecualian ini dengan lancar—oleh klien yang menurunkan performanya, misalnya, atau dengan cara apa pun yang sesuai untuk aplikasi Anda.

Ada solusi serupa untuk satu kasus khusus mengubah jenis data dalam metode yang ada. Jika Anda memiliki serikat yang cabangnya adalah penunjuk dan yang tidak memiliki cabang default untuk jenis yang tidak dikenal, Anda dapat menambahkan cabang baru yang menggunakan jenis data baru. Ini tidak akan mengubah ukuran struktur data. Saat klien Anda berbicara dengan server baru, klien dapat menggunakan jenis data baru. Namun, ketika klien Anda berbicara dengan server lama, run time akan meningkatkan pengecualian RPC_S_INVALID_TAG. Sekali lagi, Anda harus menulis kode klien Anda untuk menangani pengecualian ini dengan tepat.

Antarmuka DCOM diidentifikasi oleh GUID-nya. Di DCOM, antarmuka dianggap tidak dapat diubah dan Anda hanya dapat membuat perubahan dengan membuat antarmuka baru yang mewarisi dari antarmuka lama. Aturan ini memastikan bahwa klien dan server tetap kompatibel.