2011-09-07 29 views
1

我有一个Web服务,需要从BizTalk业务流程中使用。 我在BizTalk使用我定义的消息架构,它们看起来像如何从BizTalk 2010中使用WCF服务

<?xml version="1.0" encoding="utf-16"?> 
    <xs:schema 
     xmlns:mstns="http://tempuri.org/XMLSchema.xsd" 
     xmlns="http://www.myapp.com/schemas/IntegrationApplication-instance" 
     xmlns:b="http://schemas.microsoft.com/BizTalk/2003" 
     xmlns:ns0="https://DTIB.PropertySchema" 
     elementFormDefault="qualified" 
     targetNamespace="http://www.myapp.com/schemas/IntegrationApplication-instance" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
     <xs:include schemaLocation=".\CommonTypes.xsd" /> 
     <xs:element name="ProviderRequest"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="Header" type="HeaderType" /> 
      <xs:element name="Parameters" type="ParametersType" /> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
    </xs:schema> 

在WCF服务,我已方法,如

public ProviderResponse Provide(ProviderRequest providerRequest) {...} 

其中ProviderRequest就像

 [DataContract(Namespace = "http://www.myapp.com/schemas/IntegrationApplication-instance")] 
     public class ProviderRequest 
     { 
      [DataMember] 
      public Header Header { get; set; } 

      [DataMember] 
      public Parameter[] Parameters { get; set; } 
     } 

定义的定义当我创建发送端口并尝试发送ProviderRequest消息时,它会失败并显示不同的错误。

使用与BizTalk项目中定义的相同架构的WCF服务的最佳方法是什么?

回答

1

最好的办法是运行一个服务实例,然后从Visual Studio中“添加生成的项目” - >“使用WCF服务”。

这将生成您的服务消息XSD和端口类型,并且是一种低摩擦的方式来执行您正在尝试执行的操作。

+0

我尝试过这样,它给了我一个错误“执行接收管道失败:”Microsoft.BizTalk.DefaultPipelines.XMLReceive,Microsoft.BizTalk.DefaultPipelines,版本= 3.0.1.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35“来源: “XML反汇编程序”接收端口:“WcfReceivePort_BizTalkWcfService/Provider”URI:“/BizTalkWcfService/Provider.svc”原因:由于多个模式与消息类型匹配,无法找到文档说明“。当我在XMLReceive管道属性中打开“允许无法识别的消息”选项时,它才会起作用 –

+0

@Javos - 这是一个版本控制问题。您有两个程序集中定义了相同的消息,因此当BizTalk尝试将您的xml反序列化为消息时,它不知道要使用哪一个。这是不好的做法,可能会导致运行时失败,因此您应该从一个或另一个程序集中删除消息定义。请注意,这些程序集不一定是同一个BizTalk应用程序的一部分。 –

+0

好的,但是如果我想在我的系统之间使用共享消息模式,那么我应该怎么做? –

0

非常有趣的问题,可能发生在别人身上的情景。

这里有一些建议。

最常见的情况:需要消耗一个服务,并希望使用这些消息 - 使用休的建议“添加生成的项...”

不常见的情况:您已经创建了一个模式,一个服务也使用(下同) - 使用休的建议“添加生成的项...” - 删除是重复的模式,无论是自己的还是从创建

不那么常见的情况:你想消费使用相同的架构 两个服务 - 使用休的建议“添加生成的项...” - 删除是从生成

也从没发生在我身上案件之一的重复模式:你已经创建了一个服务也使用的模式(不是相同的,但是相同的根名称和名字空间) - 没有什么可做的,这是行不通的(开箱即用)