Bagikan melalui


Cara Menggunakan Ekspresi untuk Menjalankan Alur

BizTalk Server memiliki kemampuan untuk memanggil pipeline secara sinkron dari dalam Orkestrasi. Ini memungkinkan orkestrasi untuk memanfaatkan pemrosesan pesan yang dienkapsulasi dalam alur (baik mengirim atau menerima) terhadap isi data tanpa harus mengirim data tersebut melalui infrastruktur olahpesan.

Anda dapat menggunakan fitur ini untuk mengaktifkan orkestrasi untuk memanggil alur pengiriman untuk menggabungkan beberapa pesan ke dalam satu pertukaran keluar. Sebaliknya, orkestrasi dapat memanggil alur penerima untuk mendekode dan membongkar pertukaran yang diperoleh di luar infrastruktur olahpesan, tanpa menimbulkan biaya pemrosesan melalui kotak pesan.

Detail lebih lanjut

Orkestrasi menggunakan metode di kelas XLANGPipelineManager (di namespace Microsoft.XLANGs.Pipeline ) untuk memanggil alur kirim atau terima. Alur Terima menggunakan satu pesan atau pertukaran dan menghasilkan nol atau lebih pesan, sama seperti ketika alur dijalankan dalam konteks menerima pesan dalam pesan BizTalk. Alur Kirim menggunakan satu atau beberapa pesan dan menghasilkan satu pesan atau pertukaran, sekali lagi, sama seperti ketika alur dijalankan dalam konteks pengiriman pesan dalam pesan BizTalk.

Memanggil Alur Penerimaan

Untuk memanggil alur penerima dari dalam orkestrasi, aplikasi memanggil metode ExecuteReceivePipeline() dari kelas XLANGPipelineManager . Metode ini menggunakan pertukaran tunggal dan mengembalikan kumpulan nol atau lebih pesan (terkandung dalam instans kelas ReceivePipelineOutputMessages ). Sintaks metode ini dirinci dalam referensi pustaka kelas .NET untuk kelas XLANGPipelineManager .

API untuk menjalankan alur penerimaan dari dalam orkestrasi adalah:

// Execute receive pipeline

static public ReceivePipelineOutputMessages ExecuteReceivePipeline(System.Type receivePipelineType, XLANGMessage msg);

Panggilan ke alur penerima biasanya akan dilakukan dalam bentuk Ekspresi dalam orkestrasi.

Untuk memanggil alur penerima dari dalam orkestrasi, pengembang harus mereferensikan rakitan alur dalam proyek orkestrasi. Berikut ini adalah contoh orkestrasi yang memanggil alur penerima:

Memanggil layar Alur Penerimaan

Untuk contoh yang lebih rinci, lihat sampel SDK Composed Message Processor (BizTalk Server Sample).

Nota

Variabel jenis ReceivePipelineOutputMessages hanya dapat dideklarasikan dalam lingkup atomik dalam orkestrasi. Ini karena variabel jenis ini tidak dapat diserialisasikan dan karena itu tidak akan dipertahankan dalam orkestrasi, dan orkestrasi tidak pernah dipertahankan saat dijalankan dalam lingkup atom. Ini berarti bahwa alur penerimaan hanya dapat dijalankan dalam cakupan atom.

Nota

Saat memanggil alur PassThruReceive atau komponen alur kustom dari dalam orkestrasi, Anda harus mendeklarasikan jenis variabel untuk pesan masuk sebagai System.Xml.XmlDocument meskipun jenis pesan masuk adalah XML atau tidak. Oleh karena itu, Anda mungkin mengalami pengecualian jika Anda mencoba mengoperasikannya jika pesan masuk adalah pesan non-XML seperti pesan format file datar. Hal ini karena mesin orkestrasi tersebut berniat menggunakan System.Xml.XmlDocument untuk semua jenis pesan masuk dalam skenario yang dijelaskan di atas.

Memanggil Alur Kirim

Untuk memanggil alur kirim dari dalam orkestrasi, aplikasi memanggil metode ExecuteSendPipeline() dari kelas XLANGPipelineManager . Metode ini menggunakan kumpulan satu atau beberapa pesan (terkandung dalam instans kelas SendPipelineInputMessages ) dan mengembalikan satu pertukaran. Sintaks metode ini dirinci dalam referensi pustaka kelas .NET untuk kelas XLANGPipelineManager . Karena eksekusi alur kirim menghasilkan pertukaran baru, panggilan ke metode ExecuteSendPipeline() harus dilakukan dalam bentuk penetapan pesan, seperti:

API untuk menjalankan alur kirim dari dalam orkestrasi adalah:

// Execute a send pipeline

static public ExecuteSendPipeline(System.Type sendPipelineType, SendPipelineInputMessages inputMsgs, XLANGMessage msg);

Panggilan ke alur kirim harus dilakukan dalam bentuk Penetapan Pesan dalam orkestrasi.

Untuk memanggil alur kirim dari dalam orkestrasi, pengembang harus mereferensikan rakitan alur dalam proyek orkestrasi. Contoh orkestrasi yang memanggil alur kirim:

Pemanggilan Layar Jalur Pengiriman

Nota

Saat memanggil alur XMLTransmit default, Anda harus mengatur properti konteks pesan XMLNORM. EnvelopeSpecName ke nama skema Amplop yang sepenuhnya memenuhi syarat. Contohnya:

MyMessage(XMLNORM.EnvelopeSpecName) = "PipelineSchemas.POEnv, PipelineSchemas, Version=1.0.0.0, Culture=nuetral, PublicKeyToken=12e5cc95621c33e8";

Untuk contoh yang lebih rinci, lihat Sampel SDK Agregator (Sampel BizTalk Server).

Eksekusi Alur - Perbedaan Perilaku

Eksekusi alur kirim atau terima ketika dipanggil oleh orkestrasi sebagian besar sama seperti ketika alur yang sama dijalankan dalam infrastruktur olahpesan (yaitu di lokasi terima atau kirim port). Namun, ada perbedaan perilaku tertentu yang disebutkan di bawah ini.

Perbedaan Dalam Tahapan Alur Kerja

Pelaksanaan tahap-tahap dalam proses pengiriman atau penerimaan yang dipanggil dari dalam suatu orkestrasi hampir identik dengan pelaksanaan tahap-tahap tersebut ketika proses tersebut dipanggil dari infrastruktur olahpesan BizTalk, dengan pengecualian yang disebutkan di bawah.

  • Assembler/Disassembler: Tahap perakitan dan penguraian tersebut tidak akan memproses data Profil Pelacakan.

  • Encoder/Decoder: Encoder MIME menandatangani pesan secara digital menggunakan sertifikat yang dikonfigurasi di host terkait. Encoder SMIME mengenkripsi pesan dengan menggunakan sertifikat dalam konteks pesan yang diteruskan ke dalam pipeline.

Resolusi Skema

Ada dua algoritma pencarian skema yang didukung saat menjalankan alur dari orkestrasi:

  • Resolusi menurut jenis

  • Resolusi berdasarkan nama

    Dalam kasus di mana skema duplikat disebarkan, logika algoritma untuk memilih skema yang sesuai identik dengan yang digunakan saat mengeksekusi dalam konteks infrastruktur olahpesan.

Jalur Transaksi

Alur yang tahapnya memanggil komponen transaksi tidak akan memiliki konteks transaksi yang tersedia. Setiap panggilan ke IPipelineContext.GetTransaction() akan melempar NotSupportedException. Ini tidak menghalangi eksekusi alur seperti itu dari orkestrasi, tetapi itu berarti bahwa alur harus mendeteksi dan menangani situasi ini.

Tujuan Pesan

Mengontrol tujuan pesan menurut komponen alur tidak didukung dalam konteks ini. Mengatur properti konteks MessageDestination atau SuspendOnRoutingFailure akan menyebabkan XLANGPipelineManagerException dilemparkan.

Jenis Komponen Alur

Komponen alur harus didasarkan pada hal berikut agar dapat dipanggil dari dalam orkestrasi:

  • .NET Framework v1.1

  • .NET Framework v2.0

  • .NET Framework v3.0

  • .NET Framework v3.5

  • .NET Framework v4.0

  • .NET Framework v2.0

  • COM

Pembatasan

Jenis alur berikut tidak dapat dijalankan dari dalam orkestrasi:

  • Proses alur transaksi

  • Alur yang dapat dipulihkan

  • Alur yang memanggil API pencegat BAM ( NotSupportedException akan dilemparkan).

  • Instans alur yang sama tidak dapat dijalankan di cabang yang berbeda dari jalur paralel kecuali ditempatkan dalam ruang lingkup yang disinkronkan di setiap cabang.

  • Pipa (rakitan) yang sudah dibuat menggunakan BizTalk Server 2006 SDK.

Mode dan Efek Kegagalan

Setiap kegagalan dalam eksekusi jalur pemrosesan yang akan mengakibatkan penangguhan pesan apabila jalur ini dipanggil dari dalam BizTalk Server Messaging Infrastructure, sebagai gantinya akan mengakibatkan pengecualian dilemparkan. Pengecualian yang dilemparkan berjenis Microsoft.XLANGs.Pipeline.XLANGPipelineManagerException. Pengecualian yang dilemparkan ini dapat ditangani dalam blok tangkapan dalam orkestrasi panggilan. Jika orkestrasi tidak menangkap pengecualian yang dilemparkan, mesin XLANGs melaporkan kesalahan teks yang mencakup informasi pengecualian dalam pengecualian yang dilemparkan.

Pengecualian melakukan pemformatan pesan kesalahan yang dihasilkan oleh komponen alur.

Properti Pesan dari kelas XLANGPipelineManagerException berisi detail kesalahan eksekusi alur. Detail ini dalam format berikut:

  • Ada kegagalan menjalankan alur jenis <pipeline>. <Detail kesalahan pesan kesalahan yang diformat>.

    Dalam pesan ini, <jenis> alur adalah nama kelas alur dan <pesan> kesalahan yang diformat adalah deskripsi kegagalan tertentu yang terjadi selama eksekusi alur.

    Misalnya, jika orkestrasi memanggil alur penerima dan eksekusi alur tersebut gagal karena tidak ada komponen alur yang mengenali pesan, nilai properti XLANGPipelineManagerException adalah:

Atribut XLANGPipelineManagerException Nilai
Pesan Ada kegagalan mengeksekusi alur pemrosesan penerimaan "MyPipelines.ReceivePipeline". Detail kesalahan: "Tidak ada komponen tahap Disassemble yang dapat mengenali data.
Komponen String.Empty

Sebagai contoh lain, jika orkestrasi memanggil alur kirim dan eksekusi alur tersebut gagal karena ada kegagalan validasi, teks dalam properti PesanXLANGPipelineManagerException adalah:

Properti XLANGPipelineManagerException Nilai
Pesan Ada kegagalan menjalankan alur kirim "MyPipelines.SendPipeline". Detail kesalahan: "Gagal memvalidasi dokumen: "Elemen <nama> elemen tidak valid - Nilai elemen> nilai <tidak valid sesuai dengan jenis data 'String' - Batasan Pola gagal.""
Komponen "Microsoft.BizTalk.Component.XmlValidator"