1

我有平面文件架构,其中我将中缀根处的允许消息分解设置为 true。我还设置了 Record Max Occurrence 1。发送消息并将多条消息发送到发送端口。我在接收和发送端口中使用了接收管道(带有平面文件反汇编)和发送管道(XML 传输)。直到这一切都很好。

平面文件架构

接收端口的输入 .txt 文件

1000 ABC IT 1001 DEF 维护 1002 GHI 工资单

输出是三个 .xml 文件,例如

  <?xml version="1.0" encoding="utf-8" ?> 
  <Record xmlns="http://FlatFilewithEnvelop.FlatFileSchema1">
  <Employee xmlns="">
  <ID>1000</ID> 
  <Name>ABC</Name> 
  <Dept>IT</Dept> 
  </Employee>
  </Record>


 <?xml version="1.0" encoding="utf-8" ?> 
 <Record xmlns="http://FlatFilewithEnvelop.FlatFileSchema1">
 <Employee xmlns="">
 <ID>1001</ID> 
 <Name>DEF</Name> 
 <Dept>Maintenece</Dept> 
 </Employee>
 </Record>

 <?xml version="1.0" encoding="utf-8" ?> 
 <Record xmlns="http://FlatFilewithEnvelop.FlatFileSchema1">
 <Employee xmlns="">
 <ID>1002</ID> 
 <Name>GHI</Name> 
 <Dept>Payroll</Dept> 
 </Employee>
 </Record>

现在我只想发送具有特定 ID 的消息。所以我在使用决策形状的项目中添加了一个编排,使用表达式。否则我不想向发送端口发送任何消息。

Msg(FlatFilewithEnvelop.PropertySchema.ID) == 1000

编排

如果我在接收端口发送相同的消息,我会在发送端口收到四条消息(如下所示)。我不知道错误是什么,谁能告诉我错误是什么。

<?xml version="1.0" encoding="utf-8" ?> 
<Record xmlns="http://FlatFilewithEnvelop.FlatFileSchema1">
<Employee xmlns="">
<ID>1000</ID> 
<Name>ABC</Name> 
<Dept>IT</Dept> 
</Employee>
</Record>

<?xml version="1.0" encoding="utf-8" ?> 
<Record xmlns="http://FlatFilewithEnvelop.FlatFileSchema1">
<Employee xmlns="">
   <ID>1000</ID> 
   <Name>ABC</Name> 
   <Dept>IT</Dept> 
  </Employee>
 </Record>

<?xml version="1.0" encoding="utf-8" ?> 
<Record xmlns="http://FlatFilewithEnvelop.FlatFileSchema1">
<Employee xmlns="">
<ID>1001</ID> 
<Name>DEF</Name> 
<Dept>Maintenece</Dept> 
</Employee>
</Record>

<?xml version="1.0" encoding="utf-8" ?> 
<Record xmlns="http://FlatFilewithEnvelop.FlatFileSchema1">
<Employee xmlns="">
  <ID>1002</ID> 
  <Name>GHI</Name> 
  <Dept>Payroll</Dept> 
  </Employee>
  </Record>
4

2 回答 2

3

可能发生的情况是,您最初创建了一个发送端口,其中包含订阅消息的过滤器。

然后,您创建了一个也订阅消息并绑定到发送端口的编排。

如果您查看 BizTalk Server 管理控制台并执行新查询,Search For Equals Subscriptions您将看到如下所示的发送端口过滤器

    Property    Operator    Value   Group by
    http://schemas.microsoft.com/BizTalk/2003/system-properties.SPTransportID   ==  {GUID}  Or
    http://schemas.microsoft.com/BizTalk/2003/system-properties.MessageType ==  MesageType  And

请注意订阅如何具有 OR,第一部分是端口的 GUID,第二部分是您添加到端口的过滤器。绑定到端口的业务流程发布的任何消息都会将 SPTransportID 设置为端口的 GUID。

发送端口上的过滤器仍在寻找消息,并且编排也在向端口发布消息,因此有四个消息。

解决方案。从端口移除过滤器。

于 2014-08-26T21:10:28.913 回答
2

另一件事是保留您的发送端口订阅,并通过使用所需值验证提升的字段 ID 来丰富它,并禁用编排。因此,您的消息将仅被发送端口拦截。

于 2014-08-26T22:13:34.377 回答