BizTalk Orchestration with Envelope Schema

时间:2014-08-26 17:30:32

标签: biztalk biztalk-2010 biztalk-orchestrations

我有平面文件架构,我将Infix Root中的Allow Message Breakup设置为true。我还设置了记录最大发生次数1.发送消息并将多个消息发送到发送端口。我在接收和发送端口使用了接收管道(带有平面文件反汇编)和发送管道(XML传输)。直到这个工作正常。

The Flat File Schema

接收端口的输入.txt文件

1000 ABC IT 1001 DEF Maintenece 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的消息。所以我在项目中添加了一个Orchestration,我正在使用表达式使用决策形状。否则,我不想向发送端口发送任何消息。

Msg(FlatFilewithEnvelop.PropertySchema.ID) == 1000

Orchestration

如果我在接收端口发送相同的消息,我在发送端口收到四条消息(如下所示)。我不知道错误是什么,任何人都可以告诉我这是什么错误。

<?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>

2 个答案:

答案 0 :(得分:3)

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

然后您创建了一个Orchestration,它也订阅了这些消息并绑定到了发送端口。

如果查看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,第二个部分将是您添加到端口的过滤器。 由Orchestration发布的绑定到端口的任何消息都会将SPTransportID设置为端口的GUID。

发送端口上的过滤器仍在查找消息,而Orchestration也在向端口发布消息,因此有四条消息。

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

答案 1 :(得分:2)

另一件事是保留您的发送端口订阅并通过对具有所需值的提升字段ID的验证来丰富它并禁用编排。因此,您的邮件只会被发送端口拦截。