AssemblyExecuteAdapter

时间:2022-05-08
本文章向大家介绍AssemblyExecuteAdapter,主要内容包括BizTalk custom adapter、代码、配置、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

BizTalk custom adapter

AssemblyExecuteAdapter

功能

更为方便的扩展BizTalk custom adapter 的交互方式,只需要实现IAssemblyExecute 接口就可以让BizTalk AssemblyExecuteAdapter 执行需要的业务逻辑。

代码

AssemblyExecuteAdapterTransmitterEndpoint.cs

通过配置需要加载的dll 文件来执行dll 内部处理逻辑

private Stream SendAssemblyExecuteAdapterRequest(IBaseMessage msg, AssemblyExecuteAdapterTransmitProperties config) 
 { 
 VirtualStream responseStream = null; 
 string charset = string.Empty; 
 IBaseMessagePart bodyPart = msg.BodyPart; 
 Stream btsStream; 
 string messageid = msg.MessageID.ToString("D"); 
 if (null != bodyPart && (null != (btsStream = bodyPart.GetOriginalDataStream()))) 
            { 
 try 
 { 
 Type assemblyExecuteType = Type.GetType(config.AssemblyName); 
 IAssemblyExecute assemblyexecute = (IAssemblyExecute)Activator.CreateInstance(assemblyExecuteType); 
 object inputparameters = null; 
 if (!string.IsNullOrEmpty(config.InputParameterXml)) 
 { 
 XmlDocument inputXml = new XmlDocument(); 
 inputXml.LoadXml(config.InputParameterXml); 
 inputparameters = assemblyexecute.GetInputParameter(inputXml); 
 } 
 Stream stream = assemblyexecute.ExecuteResponse(btsStream, inputparameters); 
 #region saveresponsemessage 
 string responsefilename = string.Empty; 
 if (config.SaveResponseMessagePath != string.Empty && config.SaveResponseMessagePath != "N") 
 { 
 if (!Directory.Exists(config.SaveResponseMessagePath)) 
 Directory.CreateDirectory(config.SaveResponseMessagePath); 
 responsefilename = Path.Combine(config.SaveResponseMessagePath, "res_" + messageid + ".txt"); 
 SaveFile(responsefilename, stream); 
 stream.Seek(0, SeekOrigin.Begin); 
 } 
 #endregion 
 if (config.IsTwoWay) 
 { 
 responseStream = new VirtualStream(stream); 
 } 
 } 
 catch(Exception e) 
 { 
 #region saveerrormessage 
 string errorfilename = string.Empty; 
 if (config.SaveErrorMessagePath != string.Empty && config.SaveErrorMessagePath != "N") { 
 if (!Directory.Exists(config.SaveErrorMessagePath)) 
 Directory.CreateDirectory(config.SaveErrorMessagePath); 
 errorfilename = Path.Combine(config.SaveErrorMessagePath ,messageid + ".txt"); 
 SaveFile(errorfilename, btsStream); 
 } 
 #endregion 
 string Source = "AssemblyExecuteAdapter"; 
 string Log = "Application"; 
 string Event = e.Message + "rn request message saved :" + errorfilename; 
 if (!EventLog.SourceExists(Source)) 
 EventLog.CreateEventSource(Source, Log); 
 EventLog.WriteEntry(Source, Event, EventLogEntryType.Error); 
 throw; 
 } 
            } 
 return responseStream; 
 } 

配置

配置发送端口

配置参数

Assembly qualified name:实现了IAssemblyExecute接口的dll文件

Function Name: 这个adapter的功能名称,确保唯一

Input Parameter Xml: 执行ExecuteResponse需要的参数以XML的形式提供

Save Error Message Path:保存错误报文的路径

Save Response Message Path:保存执行ExecuteResponse方法返回的结果

选择实现了IAssemblyExecute 接口的dll文件

编辑输入参数