Bagikan melalui


Metode ICrmLogControl::RegisterCompensator (comsvcs.h)

CRM Worker menggunakan metode ini untuk mendaftarkan CRM Compensator dengan infrastruktur CRM. Ini harus menjadi metode pertama yang dipanggil oleh Pekerja CRM, dan dapat dipanggil hanya sekali. Jika Pekerja CRM menerima kode kesalahan "pemulihan sedang berlangsung" tentang memanggil metode ini, itu harus memanggil metode ini lagi sampai menerima keberhasilan.

Sintaks

HRESULT RegisterCompensator(
  [in] LPCWSTR lpcwstrProgIdCompensator,
  [in] LPCWSTR lpcwstrDescription,
  [in] LONG    lCrmRegFlags
);

Parameter

[in] lpcwstrProgIdCompensator

ProgId dari CRM Compensator. CLSID dari CRM Compensator dalam bentuk string juga diterima.

[in] lpcwstrDescription

String deskripsi yang akan digunakan oleh antarmuka pemantauan.

[in] lCrmRegFlags

Bendera dari enumerasi CRMREGFLAGS yang mengontrol fase penyelesaian transaksi mana yang harus diterima oleh CRM Compensator dan apakah pemulihan harus gagal jika transaksi yang diragukan tetap ada setelah pemulihan telah dicoba.

Nilai kembali

Metode ini dapat mengembalikan nilai berikut.

Menampilkan kode Deskripsi
S_OK
Metode berhasil diselesaikan.
E_POINTER
Penunjuk NULL disediakan sebagai argumen.
E_UNEXPECTED
Terjadi kesalahan tidak terduga.
XACT_E_NOTRANSACTION
Komponen yang membuat clerk CRM tidak memiliki transaksi.
XACT_E_RECOVERYINPROGRESS
Pemulihan file log CRM masih berlangsung.
XACT_E_RECOVERY_FAILED
Pemulihan file log CRM gagal karena transaksi yang diragukan tetap ada.
XACT_E_WRONGSTATE
Metode ini dipanggil dalam keadaan yang salah; baik sebelum RegisterCompensator atau ketika transaksi selesai (Pekerja CRM).
E_OUTOFMEMORY
Terjadi kesalahan kehabisan memori.
E_NOINTERFACE
CRM Compensator tidak mendukung setidaknya salah satu antarmuka yang diperlukan (ICrmCompensator atau ICrmCompensatorVariants).

Keterangan

Parameter lCrmRegFlags memungkinkan pelaksana untuk memutuskan fase penyelesaian transaksi mana yang ingin diterima CRM Compensator. Beberapa CRM Compensator mungkin tidak melakukan pekerjaan dalam fase persiapan dan oleh karena itu tidak perlu menerima pemberitahuan persiapan; dapat meningkatkan performa untuk menentukan bahwa tidak ada fase persiapan yang diperlukan dalam kasus ini.

Disarankan agar Pekerja CRM dan CRM Compensator dikembangkan sebagai komponen utas "Keduanya" (Model Threading = Apartemen Apa pun). Namun, dalam beberapa kasus ini mungkin tidak dimungkinkan karena kendala bahasa (misalnya, saat mengembangkan CRD dengan Visual Basic). Apartment-threaded CRM Compensators (Threading Model = Single Thread Apartment) akan kebuntuan dalam fase persiapan kecuali properti sinkronisasi mereka diatur ke "tidak didukung". Alternatif lain untuk Apartment-threaded CRM Compensators adalah melewati fase persiapan jika tidak diperlukan.

Dalam skenario dengan beberapa Koordinator Transaksi Terdistribusi (DTC), ada kemungkinan bahwa transaksi DTC dapat masuk ke status dalam keraguan. Biasanya, ini karena gangguan terjadi selama transaksi dan pencetus transaksi tidak dapat dihubungi untuk mengetahui hasil transaksi. Dalam hal ini, infrastruktur CRM tidak dapat menentukan hasil transaksi. Pelaksana CRM dapat memutuskan apakah transaksi baru harus diizinkan dalam kasus ini.

Bendera "fail if in-doubts remain" digunakan sebagai berikut: Dengan menentukan bendera "fail if in-doubts remain" pada RegisterCompensator, jika transaksi yang diragukan tetap ada setelah pemulihan, panggilan ke RegisterCompensator gagal dengan kode kesalahan "pemulihan gagal". Jika bendera "gagal jika diragukan tetap" tidak ditentukan, pemulihan berhasil, transaksi baru diizinkan, dan transaksi yang diragukan tetap ada di file log CRM. Infrastruktur CRM mencoba menyelesaikan transaksi yang diragukan ini lagi pada pemulihan berikutnya (ketika proses server aplikasi dimulai ulang).

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header comsvcs.h

Lihat juga

ICrmLogControl