BizTalk SMTP 消息“msg_Email”的“PartAttachment”部分在构造块的末尾包含一个空值

如何解决BizTalk SMTP 消息“msg_Email”的“PartAttachment”部分在构造块的末尾包含一个空值

问题的快速摘要 - 当我将 RawString 设置为文本时,会发送带有附件的电子邮件并正确命名。当我将附件设置为 RawString 消息时,出现错误“消息‘msg_Email’的‘PartAttachment’部分在构造块的末尾包含一个空值。”

我已经创建了我自己以前使用过的 RawString 类。编排通过传递管道接收 CSV 文件。按照我找到的一些文档,我收到一个 XmlDocument,在下一个形状中,我按如下方式构造 RawString:

msg_Raw_String.MessagePart_1 = msg_Ledger6002_File_XmlDoc;

但是,如果我在 RawString 中设置为虚拟文本,则会发送带有附件的电子邮件(附件只是一个具有以下值的文本文件

   msg_Email.PartAttachment = new XXXLedger6002.Component.RawString("Test Text"); 

消息分配中的完整代码

msg_Email.BodyPart = new XXXLedger6002.Component.RawString("See attached email. Method 2 Dynamic"); 

// Force some value to make sure it is not null 
//msg_Email.PartAttachment = new Ledger6002.Component.RawString("Test Text"); 
// Tried both of these,same error: 
//msg_Email.PartAttachment = msg_Ledger6002_File_XmlDoc;
msg_Email.PartAttachment = msg_Raw_String.MessagePart_1; 
// Syntax doesn't allow this: 
// msg_Email.PartAttachment = msg_Raw_String;


// Set the filename as it should display on the attachment in the email 
// (drop the path,just the filename/extension)
attachmentName = System.IO.Path.GetFileName(
                       msg_Ledger6002_File_XmlDoc(FILE.ReceivedFileName));

msg_Email.PartAttachment(MIME.FileName) =  attachmentName; 

//msg_Email.BodyPart(Microsoft.XLANGs.BaseTypes.ContentType) = "text/plain";//
//msg_Email.AttachmentPart(Microsoft.XLANGs.BaseTypes.ContentType) = "text/plain";

msg_Email(SMTP.Subject) = "Ledger6002 File";
msg_Email(SMTP.SMTPTo) = msg_Config_Email.smtpToEmail;
msg_Email(SMTP.From) = msg_Config_Email.smtpFromEmail; 
msg_Email(SMTP.SMTPAuthenticate) = 0;   // do not authenticate to SMTP server 
msg_Email(SMTP.SMTPHost) = msg_Config_Email.smptHostName; 

// msg_Email(SMTP.EmailBodyText) = "UTF-8"; 
msg_Email(SMTP.EmailBodyTextCharset)  = "UTF-8"; 
msg_Email(SMTP.MessagePartsAttachments) = 2; 

// No email generated with comment out line,trying same without mailto:
SMTP_Dyn_Email(Microsoft.XLANGs.BaseTypes.Address) = "mailto:" + msg_Config_Email.smtpToEmail; 

SMTP_Dyn_Email(Microsoft.XLANGs.BaseTypes.TransportType) = "SMTP";

错误

xlang/s engine event log entry: Uncaught exception (see the 'inner exception' below) has suspended an instance of service 'Ledger6002.Logic.Ledger6002_Process_File(9eb6993c-87d0-7bf0-b0bf-e1f684000af2)'.
The service instance will remain suspended until administratively resumed or terminated. 
If resumed the instance will continue from its last persisted state and may re-throw the same unexpected exception.
InstanceId: ecaa7ed2-04c1-46b9-b845-cf3211b83387
Shape name: Send_Dyn_Email
ShapeId: 4ada59c3-367e-40b4-babc-d0d9999feb77
Exception thrown from: segment 1,progress 60
Inner exception: The part 'PartAttachment' of message 'msg_Email' contained a null value at the end of the construct block.
        
Exception type: NullPartException
Source: Microsoft.XLANGs.Engine
Target Site: System.IO.Stream Persist(System.String ByRef,Boolean)
The following is a stack trace that identifies the location where the exception occured

   at Microsoft.XLANGs.Core.CustomFormattedPart.Persist(String& encoding,Boolean wantEncoding)
   at Microsoft.BizTalk.XLANGs.BTXEngine.BTXXlangStore.StagePartData(Part part)
   at Microsoft.BizTalk.XLANGs.BTXEngine.BTXXlangStore.PrepareMessage(XLANGMessage msg,IList promoteProps,IList toPromote)
   at Microsoft.BizTalk.XLANGs.BTXEngine.BTXXlangStore.WriteMessageState(IBTPEPInfoLookup pepLookup,Guid portId,XLANGMessage msg,Segment seg,String opname,String url,Boolean track,IList toPromote)
   at Microsoft.BizTalk.XLANGs.BTXEngine.BTXLogicalPortBinding.SendMessage(XLANGMessage msg,XlangStore store,OperationInfo op,IList additionalProps,IList toPromote,Boolean ignoreRoutingFailure)
   at Microsoft.BizTalk.XLANGs.BTXEngine.BTXPortBase.SendMessage(Int32 iOperation,Correlation[] initCorrelations,Correlation[] followCorrelations,Context cxt,ActivityFlags flags)
   at Ledger6002.Logic.Ledger6002_Process_File.segment1(StopConditions stopOn)
   at Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s,StopConditions stopCond,Exception& exp)
    

解决方法

以下是一种似乎有效的方法。

msg_Email.PartAttachment = new SBA.Ledger6002.Component.RawString(
                                msg_Raw_String.MessagePart_1.ToString()); 

如果有人能解释为什么我不能将它设置为 msg_Raw_String.MessagePart_1,我很想知道。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?