Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server
Azure SQL Managed Instance
Dalam pelajaran ini, Anda akan belajar memulai percakapan yang mencakup dua database dalam instans Mesin Database yang sama. Anda juga akan mempelajari cara menyelesaikan siklus pesan balasan permintaan sederhana, lalu mengakhiri percakapan.
Prosedur
Beralih ke database InitiatorDB
Salin dan tempel kode berikut ke dalam jendela Editor Kueri. Kemudian, jalankan untuk mengalihkan konteks ke database InisiatorDB tempat Anda memulai percakapan.
USE InitiatorDB; GO
Memulai percakapan dan mengirim pesan permintaan
Salin dan tempel kode berikut ke dalam jendela Editor Kueri. Kemudian, jalankan untuk memulai percakapan dan kirim pesan permintaan ke TgtDB/2DBSample/TargetService di TargetDB. Kode harus dijalankan dalam satu blok karena variabel digunakan untuk meneruskan handel dialog dari BEGIN DIALOG ke pernyataan KIRIM. Batch menjalankan pernyataan BEGIN DIALOG untuk memulai percakapan dan membangun pesan permintaan. Kemudian, menggunakan handel dialog dalam pernyataan SEND untuk mengirim pesan permintaan pada percakapan tersebut. Pernyataan SELECT terakhir menampilkan teks pesan yang dikirim.
DECLARE @InitDlgHandle UNIQUEIDENTIFIER; DECLARE @RequestMsg NVARCHAR(100); BEGIN TRANSACTION; BEGIN DIALOG @InitDlgHandle FROM SERVICE [//InitDB/2DBSample/InitiatorService] TO SERVICE N'//TgtDB/2DBSample/TargetService' ON CONTRACT [//BothDB/2DBSample/SimpleContract] WITH ENCRYPTION = OFF; SELECT @RequestMsg = N'<RequestMsg>Message for Target service.</RequestMsg>'; SEND ON CONVERSATION @InitDlgHandle MESSAGE TYPE [//BothDB/2DBSample/RequestMessage] (@RequestMsg); SELECT @RequestMsg AS SentRequestMsg; COMMIT TRANSACTION; GO
Beralih ke database TargetDB
Salin dan tempel kode berikut ke dalam jendela Editor Kueri. Kemudian, jalankan untuk mengalihkan konteks ke database TargetDB tempat Anda akan menerima pesan permintaan dan mengirim pesan balasan kembali ke InitiatorDB.
USE TargetDB; GO
Menerima permintaan dan mengirim balasan
Salin dan tempel kode berikut ke dalam jendela Editor Kueri. Kemudian, jalankan untuk menerima pesan balasan dari TargetQueue2DB dan kirim pesan balasan kembali ke inisiator. Pernyataan RECEIVE mengambil pesan permintaan. Kemudian, pernyataan SELECT berikut menampilkan teks sehingga Anda dapat memverifikasi bahwa itu adalah pesan yang sama yang dikirim di langkah sebelumnya. Pernyataan IF menguji apakah pesan yang diterima adalah jenis pesan permintaan, dan jika pernyataan SEND digunakan untuk mengirim pesan balasan kembali ke inisiator. Ini juga menguji apakah pernyataan END CONVERSATION digunakan untuk mengakhiri sisi target percakapan. Pernyataan SELECT akhir menampilkan teks pesan balasan.
DECLARE @RecvReqDlgHandle UNIQUEIDENTIFIER; DECLARE @RecvReqMsg NVARCHAR(100); DECLARE @RecvReqMsgName sysname; BEGIN TRANSACTION; WAITFOR ( RECEIVE TOP(1) @RecvReqDlgHandle = conversation_handle, @RecvReqMsg = message_body, @RecvReqMsgName = message_type_name FROM TargetQueue2DB ), TIMEOUT 1000; SELECT @RecvReqMsg AS ReceivedRequestMsg; IF @RecvReqMsgName = N'//BothDB/2DBSample/RequestMessage' BEGIN DECLARE @ReplyMsg NVARCHAR(100); SELECT @ReplyMsg = N'<ReplyMsg>Message for Initiator service.</ReplyMsg>'; SEND ON CONVERSATION @RecvReqDlgHandle MESSAGE TYPE [//BothDB/2DBSample/ReplyMessage] (@ReplyMsg); END CONVERSATION @RecvReqDlgHandle; END SELECT @ReplyMsg AS SentReplyMsg; COMMIT TRANSACTION; GO
Beralih ke database InitiatorDB
Salin dan tempel kode berikut ke dalam jendela Editor Kueri. Kemudian, jalankan untuk mengalihkan konteks kembali ke database InitiatorDB tempat Anda akan menerima pesan balasan dan mengakhiri percakapan.
USE InitiatorDB; GO
Menerima balasan dan mengakhiri percakapan
Salin dan tempel kode berikut ke dalam jendela Editor Kueri. Kemudian, jalankan untuk menerima pesan balasan dan akhiri percakapan. Pernyataan RECEIVE mengambil pesan balasan dari InitiatorQueue2DB. Pernyataan END CONVERSATION mengakhiri sisi inisiator percakapan. Pernyataan SELECT terakhir menampilkan teks pesan balasan sehingga Anda dapat mengonfirmasinya sama dengan apa yang dikirim pada langkah sebelumnya.
DECLARE @RecvReplyMsg NVARCHAR(100); DECLARE @RecvReplyDlgHandle UNIQUEIDENTIFIER; BEGIN TRANSACTION; WAITFOR ( RECEIVE TOP(1) @RecvReplyDlgHandle = conversation_handle, @RecvReplyMsg = message_body FROM InitiatorQueue2DB ), TIMEOUT 1000; END CONVERSATION @RecvReplyDlgHandle; -- Display received request. SELECT @RecvReplyMsg AS ReceivedReplyMsg; COMMIT TRANSACTION; GO
Langkah berikutnya
Ini menyimpulkan tutorial. Tutorial hanya pengantar singkat. Mereka tidak menjelaskan semua opsi yang tersedia. Tutorial menggunakan logika yang disederhanakan dan penanganan kesalahan, dan tidak boleh digunakan di lingkungan produksi. Untuk membuat percakapan yang efisien, andal, dan kuat, Anda memerlukan kode yang lebih kompleks daripada contoh dalam tutorial ini.