如何从BizTalk 2010中使用WCF服务

时间:2011-09-07 14:13:21

标签: wcf xsd biztalk biztalk-2010

我有一个需要从BizTalk业务流程中使用的Web服务。 我已经定义了我在BizTalk中使用的消息模式,它们看起来像

    <?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服务的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您最好的选择是运行服务实例,然后“添加生成的项目” - &gt;从Visual Studio中“使用WCF服务”。

这将生成您的服务消息XSD和端口类型,并且是您正在尝试做的事情的低摩擦方式。

答案 1 :(得分:0)

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

以下是一些建议。

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

不太常见的情况:您已经创建了服务也使用的架构(相同) - 使用休的建议“添加生成的项目......” - 删除重复的模式,可以是您自己的模式,也可以是创建的

不常见的情况:您希望使用两个使用相同架构的服务 - 使用休的建议“添加生成的项目......” - 从生成的

之一中删除重复的模式

从未发生过我的情况:您已经创建了一个服务也使用的模式(不是相同的,但是相同的根名称和名称空间) - 无事可做,这不起作用(开箱即用)