Web services 使用BizTalk Web服务重新发布内部Web服务

Web services 使用BizTalk Web服务重新发布内部Web服务,web-services,biztalk,biztalk-2013,biztalk-orchestrations,Web Services,Biztalk,Biztalk 2013,Biztalk Orchestrations,我正在尝试使用BizTalk在两个web服务之间进行通信。 它必须是这样的: Service1获取输入并通过BizTalk将消息发送到Service2 Service2响应该消息,将其转发给BizTalk,并将其传递给Service1 最后,Service1将响应返回给用户 我已经努力了好几天了,但是我无法在没有编译器错误的情况下构建编排,我也找不到一个带有web服务和带有键入输入的web端口的示例。我开始相信这是不可能的,至少对BizTalk来说是不可能的 最大的问题是:这可能吗?如果是,

我正在尝试使用BizTalk在两个web服务之间进行通信。 它必须是这样的:

  • Service1
    获取输入并通过BizTalk将消息发送到
    Service2
  • Service2
    响应该消息,将其转发给BizTalk,并将其传递给
    Service1
  • 最后,
    Service1
    将响应返回给用户
我已经努力了好几天了,但是我无法在没有编译器错误的情况下构建编排,我也找不到一个带有web服务和带有键入输入的web端口的示例。我开始相信这是不可能的,至少对BizTalk来说是不可能的


最大的问题是:这可能吗?如果是,如何回答?

你的问题范围相当大,我想回答这个问题可能不太适合所谓的“Q+A”格式

然而,提供由一个或多个底层web服务组成的复合企业服务似乎是一个常见的需求

我已经构建了一个快速而肮脏的示例(BTS 2010/VS 2010),并将其上传到GitHub(在右下方以zip格式下载源代码)

下面是从零开始实现这一点所采取的步骤的“食谱”,但我相信您需要获得要遵循的代码

在Visual Studio中创建新的解决方案

添加WCF服务项目并发布到IIS(本示例中未涵盖范围)

  • 使用默认的VS2010 WCF项目,并调用该项目
    WCFService
  • 为了简单起见,使用了
    basicHttpBinding
    ,但显然可以使用其他绑定 (但需要额外关注,如安全等)
  • 请注意,
    ServiceContract
    servicebeavior
    上的
    名称空间
    ,以及
    行为名称空间
    的web配置中的
    名称空间
    都已设置好(否则这些名称空间将默认为
    tempuri
向解决方案中添加4个新的BizTalk项目:

我称它们为
BizTalkWCF.Orch
BizTalkWCF.Maps
BizTalkWCF.WCFPorts
,和
BizTalkWCF.Schemas

首先是WCFPorts

  • 右键单击
    WCFPorts
    项目,选择“添加”,然后选择“生成的项目”
  • 选择使用WCF服务
  • 检查元数据交换(Mex)端点
  • 提供WCF服务的URL(例如
    http://localhost:57582/Service.svc
  • 离开名称空间(BizTalkWCF.WcfPorts)
  • 完成向导-WCF工件现在应该存在了
  • 如果您需要导入多个Web服务,我建议您为每个Web服务创建单独的Visual Studio解决方案文件夹
因为我们已经在BizTalk中拆分了项目(这通常是一个好主意),不幸的是,向导将所有导入的工件标记为内部工件,如果它们是从其他程序集引用的,这将没有多大帮助。 打开导入的生成的业务流程(MyService.odx)(注意不要删除或移动此odx,因为它包含生成的端口-只需将其与生成的WCF工件一起保留)

在业务流程视图的底部,打开类型。在端口类型下,您应该看到WCF接口(
IService
)。单击它并将属性类型修改器更改为“公共” 对多部分消息类型执行相同的操作(4 x iSeries设备*-注意,服务上的每个WCF方法有2 x消息类型(一个用于请求,一个用于响应)

WCF端口项目现在应该构建

接下来是Schemas项目 添加2个模式,表示将从BizTalk中公开(发布)的内容(我称它们为
BizTalkServiceRequest
BizTalkServiceResponse
) 这个示例只是在底层WCF服务上提供了一个简单的外观,因此我在请求和响应上得到了与原始WCF服务类似的字段,具有相同的xs类型底层WCF服务上的已被请求和响应消息替换。但是,可以跨多个消息重构和重用架构(xsd:import)中的公共元素。 我刚刚使用了默认名称空间和“根”节点,但请注意,这些名称空间对BizTalk服务使用者是可见的,因此在实际项目中,您需要对此进行更多的考虑

请注意,我们没有重用导入/生成的WCF服务架构。在综合性企业中,还可以使用第三组架构,即“规范”架构,它不知道BizTalk服务使用者和使用的服务所使用的格式(还需要更多映射)

接下来是传入请求到WCF输入模式之间的映射,然后是从WCF输出模式返回BizTalk服务使用者的响应的另一个映射。 在map项目上,将.Net引用添加到WCFPorts项目和Schemas项目。 将新地图添加到地图项目 对于源架构,请查找引用的架构-BizTalkServiceRequest架构。 对于目标模式,选择WCF端口模式(名称mangled很糟糕,但它将是MyService的名称,而不是datacontracts或microsoft模式)。请注意,然后需要选择所包含的架构中需要使用的架构。选择
GetDataUsingContract
架构。在元素下,将鼠标从源名称元素拖到目标架构值,并从
IsAddSuffix
拖到
BoolValue
元素。 对返回响应消息执行相同的操作-显然,这次WcfResponse消息是源,而公开的BizTalk响应是目标。布尔值在repsonse中没有用处,因此只映射字符串值。 地图