Hello everyone !! I am going to write BizTalk custom send pipeline code to zip a file. What will you achieve after read out complete content of this post, you can create a custom send pipeline code and how add it in biztalk project with an project example so that you can easily able to convert any file into zip file by using send pipeline. In the last of this post you can download complete source code with an example.
Kindly follows all below following steps to achieve to send a zip file by using custom send pipeline component-
Before follows all steps, please read- BizTalk Pipeline
1. Open Microsoft Visual Studio as Administrator user and Click File>New>Project… In Installed Templates click BizTalk Projects then Empty BizTalk Server Project and Name as “BizTalkLive.Zip.Encode” and click OK.
2. Now leave every thing as it, we will do later, Now right click on your solution and a new C# class library project name as "BizTalkLive.Zip" then rename class1 as "Zip".
3. Add dll reference of Ionic for use zip method in pipeline Encode stage and also add reference Microsoft.BizTalk.Pipeline for use pipeline method. In the last of this post you are able to download Ionic.dll or It is open source library, download from some another website.
4. Now add following attribute and GUID (it is unique value of across network in the word) You can create your own unique GUID or use already that is already created, just click on Tools menu in VS then click on Create GUI, see the following picture-namespace BizTalkLive.Zip
6. In the last right click on same project BizTalkLive.Zip then click on Property after click on sign tag and then add new strong name file. Now right click same project and build it.
7. Now go to folder location and go to bin\Debug and installed Ionic and Zip dll into gac. You can reference how to install dll into gac - Install DLL into GAC
8. Now Create new biztalk project within same solution and name as "BizTalkLive.Zip.Encode" then reference dll from gac i.e. BizTalkLive.Zip in biztalk project , see the following image-
9. Add new send pipeline name as "sndZipEncode" now Click on toolbox of send pipeline and then right click and click choose items.. and select BizTalk Pipeline Component tag and click Browse.. button from right side of bottom and select BizTalkLive.Zip.dll from the already installed into gac assembly. Now a new toolbox added in pipeline toolbox name as "ZipEncoder" then select it and place on encode stage of pipeline. see the following figure-
10. Now add one schema for xml file that xml file zip at send port, Please see the following picture and also you can download complete source in the last of this post so that you can easily create schema.
11. Now see the following below picture its show how I am design orchestration flow, firstly message come from receive location then I am using a expression shape where i log a status to system application event log. In last, configure logical send port to send XML file in local directory.
12. In the last part of biztalk project zip custom send pipeline, right click on solution and set same name of biztalk project as it solution name and again right click on solution and deployed it. Now create receive port then create receive location and select PassThruReceive in receive pipeline then click on Configure button and set receive folder path and click OK then again OK.
13. Now create two send port one for route same xml file to local directory by using filter condition of BTS property of receive port name and second send port enlist in orchestration logic send port, here I have selected custom send pipeline that we have created in biztalk project so that it converted file into zip format. Please see the following picture-
Kindly follows all below following steps to achieve to send a zip file by using custom send pipeline component-
Before follows all steps, please read- BizTalk Pipeline
1. Open Microsoft Visual Studio as Administrator user and Click File>New>Project… In Installed Templates click BizTalk Projects then Empty BizTalk Server Project and Name as “BizTalkLive.Zip.Encode” and click OK.
2. Now leave every thing as it, we will do later, Now right click on your solution and a new C# class library project name as "BizTalkLive.Zip" then rename class1 as "Zip".
3. Add dll reference of Ionic for use zip method in pipeline Encode stage and also add reference Microsoft.BizTalk.Pipeline for use pipeline method. In the last of this post you are able to download Ionic.dll or It is open source library, download from some another website.
using Ionic.Zip;
using Microsoft.BizTalk.Component.Interop;
using Microsoft.BizTalk.Message.Interop;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
{
[ComponentCategory(CategoryTypes.CATID_PipelineComponent)]
[System.Runtime.InteropServices.Guid("6F31BA70-F87E-4150-B5A5-2803D00C4FA0")]
[ComponentCategory(CategoryTypes.CATID_Encoder)]
5. Now use interface IBaseComponent,IPersistPropertyBag,IComponentUI,IComponent in Zip class. As I understand that you know basic concept of IBasecomponent, IComponentUI, IComponent, IPersistPropertyBag so now come to final point IComponent stage.
public Microsoft.BizTalk.Message.Interop.IBaseMessage Execute(Microsoft.BizTalk.Component.Interop.IPipelineContext pc,
Microsoft.BizTalk.Message.Interop.IBaseMessage inmsg)
{
IBaseMessageContext context = inmsg.Context;
string fileName = string.Empty;
object obj = context.Read("ReceivedFileName", "http://schemas.microsoft.com/BizTalk/2003/file-properties");
fileName = ((string)obj).Substring(((string)obj).LastIndexOf("\\") + 1);
Byte[] TextFileBytes = null;
IBaseMessagePart msgBodyPart = inmsg.BodyPart;
//Creating
outMessage
IBaseMessage outMessage;
outMessage =
pc.GetMessageFactory().CreateMessage();
if (msgBodyPart != null)
{
outMessage.Context = PipelineUtil.CloneMessageContext(inmsg.Context);
Stream msgBodyPartStream = msgBodyPart.GetOriginalDataStream();
TextFileBytes =
ReadToEnd(msgBodyPartStream);
outMessage.AddPart("Body",
pc.GetMessageFactory().CreateMessagePart(), true);
IDictionary<string, Byte[]> lst = new Dictionary<string, Byte[]>();
lst.Add(fileName,
TextFileBytes);
MemoryStream ms;
using (ZipFile zip = new ZipFile())
{
foreach (KeyValuePair<string, Byte[]> item in (IDictionary<string, Byte[]>)lst)
{
zip.AddEntry(item.Key,
item.Value);
}
ms = new MemoryStream();
ms.Seek(0, SeekOrigin.Begin);
zip.Save(ms);
}
ms.Position = 0;
outMessage.BodyPart.Data = ms;
outMessage.Context.Promote("ReceivedFileName", "http://schemas.microsoft.com/BizTalk/2003/file-properties", fileName.Substring(0,fileName.IndexOf(".")));
}
return outMessage;
}
In above code I am using IBaseMessageContext interface
try to get received file name.
6. In the last right click on same project BizTalkLive.Zip then click on Property after click on sign tag and then add new strong name file. Now right click same project and build it.
7. Now go to folder location and go to bin\Debug and installed Ionic and Zip dll into gac. You can reference how to install dll into gac - Install DLL into GAC
8. Now Create new biztalk project within same solution and name as "BizTalkLive.Zip.Encode" then reference dll from gac i.e. BizTalkLive.Zip in biztalk project , see the following image-
9. Add new send pipeline name as "sndZipEncode" now Click on toolbox of send pipeline and then right click and click choose items.. and select BizTalk Pipeline Component tag and click Browse.. button from right side of bottom and select BizTalkLive.Zip.dll from the already installed into gac assembly. Now a new toolbox added in pipeline toolbox name as "ZipEncoder" then select it and place on encode stage of pipeline. see the following figure-
10. Now add one schema for xml file that xml file zip at send port, Please see the following picture and also you can download complete source in the last of this post so that you can easily create schema.
11. Now see the following below picture its show how I am design orchestration flow, firstly message come from receive location then I am using a expression shape where i log a status to system application event log. In last, configure logical send port to send XML file in local directory.
12. In the last part of biztalk project zip custom send pipeline, right click on solution and set same name of biztalk project as it solution name and again right click on solution and deployed it. Now create receive port then create receive location and select PassThruReceive in receive pipeline then click on Configure button and set receive folder path and click OK then again OK.
13. Now create two send port one for route same xml file to local directory by using filter condition of BTS property of receive port name and second send port enlist in orchestration logic send port, here I have selected custom send pipeline that we have created in biztalk project so that it converted file into zip format. Please see the following picture-
To download Ionic dll please click this link - Downlaod Ionic Dll
To download complete project source code please click this link - Download Source Code
!! Keep Visiting BizTalkLive !!
Nice blog .Keep updating Biztalk online course Bangalore
ReplyDeleteThanks for posting the useful information to my vision. This is excellent information
ReplyDeleteAwesome,
microsoft installation and configuration services
dassault installation and configuration services
I have a scenario where need to zip multiple files into one zip file , can this be done in your pattern ?
ReplyDeleteNo, you need extra logic in pipeline C# code to zip multiple file.
Delete