将消息从远程 WCF 服务推送到 BizTalk
Push messages from a remote WCF service to BizTalk
我正在尝试使用 OracleDBBinding 配置 WCF 服务以每隔 x 分钟从 Oracle 数据库获取数据。由于绑定配置,此轮询是自动的。此 WCF 服务将 运行 在远程服务器上。
问题是如何将远程 WCF 服务获取的数据返回给 BizTalk?
WCF 服务中是否有特定的配置来启用此功能?
我是否只在 BizTalk 中创建一个 WCF-basicHTTP 接收位置并将 URL 指向远程 WCF 服务?
是否存在远程 WCF 服务,其唯一目的是轮询 Oracle 数据库并推送到 BizTalk?
我会让 BizTalk 直接轮询 Oracle 数据库(使用 OracleDBBinding 接收位置),然后在需要时将数据发送到远程 WCF 服务。
如果您要从 Oracle 中检索数据以用于 BizTalk 应用程序,那么您应该让 BizTalk 直接轮询数据。也就是说,您不能使用 'remote' WCF 服务。
oracleDbBinding 支持为此目的进行轮询。
最好让 BizTalk 直接轮询 Oracle 数据库,正如其他人提到的那样。我会推回您的基础设施团队以找到实现这一目标的方法。但是,如果您真的无法获取它,您可以设置远程 WCF 服务来调用 BizTalk 机器上的侦听器端点。为了最大限度地减少 latency/communication 开销,您可以在 BizTalk 端使用 NetTCP 接收位置。以 BizTalk 的标准方式进行设置,使用 WCF 服务向导创建 IIS 应用程序等 - 请参阅 https://msdn.microsoft.com/en-us/library/bb728041.aspx)。您的中间服务将是该服务的客户。序列类似于:
- 远程 WCF 服务轮询来自 Oracle 的数据
- 如果收到数据,它会连接到 BizTalk 中的 NetTCP 侦听器
- 然后将数据发送到 BizTalk
- BizTalk 从那里映射数据。
请注意,这最终不会在整个事务中使用 MSDTC - 如果您的中间服务抛出异常,BizTalk 将没有 awareness/insight,您可能正在使用的任何 BizTalk 监视工具也不会。 (这就是为什么最好直接让 BizTalk 轮询的部分原因。)
就 BizTalk 而言,此数据并非来自 Oracle,而是来自中间 WCF 服务。当然,您可以使用看起来像 Oracle 适配器编写 XML 的方式的模式 - 但这不是必需的。
这是假设您的远程服务已经在自己对 Oracle 进行轮询(使用 System.Threading.Timer
或类似的东西),并且您已经准备就绪。如果您需要 BizTalk 来触发轮询事件,则没有现成的工具可以处理该事件。您可以尝试使用 Scheduled Task adapter(也许对该服务执行 HTTP POST?),但这对我来说似乎更加复杂且容易出错。您还可以设置一个 SQL 轮询适配器,它始终 returns 为真(例如,有一个 pollingdata 可用语句,如 SELECT 1
)并发布一条消息,另一个端口监听并转发到该服务- 但同样,这非常 messy/hacky 并且不是一个好主意。
我正在尝试使用 OracleDBBinding 配置 WCF 服务以每隔 x 分钟从 Oracle 数据库获取数据。由于绑定配置,此轮询是自动的。此 WCF 服务将 运行 在远程服务器上。
问题是如何将远程 WCF 服务获取的数据返回给 BizTalk?
WCF 服务中是否有特定的配置来启用此功能?
我是否只在 BizTalk 中创建一个 WCF-basicHTTP 接收位置并将 URL 指向远程 WCF 服务?
是否存在远程 WCF 服务,其唯一目的是轮询 Oracle 数据库并推送到 BizTalk?
我会让 BizTalk 直接轮询 Oracle 数据库(使用 OracleDBBinding 接收位置),然后在需要时将数据发送到远程 WCF 服务。
如果您要从 Oracle 中检索数据以用于 BizTalk 应用程序,那么您应该让 BizTalk 直接轮询数据。也就是说,您不能使用 'remote' WCF 服务。
oracleDbBinding 支持为此目的进行轮询。
最好让 BizTalk 直接轮询 Oracle 数据库,正如其他人提到的那样。我会推回您的基础设施团队以找到实现这一目标的方法。但是,如果您真的无法获取它,您可以设置远程 WCF 服务来调用 BizTalk 机器上的侦听器端点。为了最大限度地减少 latency/communication 开销,您可以在 BizTalk 端使用 NetTCP 接收位置。以 BizTalk 的标准方式进行设置,使用 WCF 服务向导创建 IIS 应用程序等 - 请参阅 https://msdn.microsoft.com/en-us/library/bb728041.aspx)。您的中间服务将是该服务的客户。序列类似于:
- 远程 WCF 服务轮询来自 Oracle 的数据
- 如果收到数据,它会连接到 BizTalk 中的 NetTCP 侦听器
- 然后将数据发送到 BizTalk
- BizTalk 从那里映射数据。
请注意,这最终不会在整个事务中使用 MSDTC - 如果您的中间服务抛出异常,BizTalk 将没有 awareness/insight,您可能正在使用的任何 BizTalk 监视工具也不会。 (这就是为什么最好直接让 BizTalk 轮询的部分原因。)
就 BizTalk 而言,此数据并非来自 Oracle,而是来自中间 WCF 服务。当然,您可以使用看起来像 Oracle 适配器编写 XML 的方式的模式 - 但这不是必需的。
这是假设您的远程服务已经在自己对 Oracle 进行轮询(使用 System.Threading.Timer
或类似的东西),并且您已经准备就绪。如果您需要 BizTalk 来触发轮询事件,则没有现成的工具可以处理该事件。您可以尝试使用 Scheduled Task adapter(也许对该服务执行 HTTP POST?),但这对我来说似乎更加复杂且容易出错。您还可以设置一个 SQL 轮询适配器,它始终 returns 为真(例如,有一个 pollingdata 可用语句,如 SELECT 1
)并发布一条消息,另一个端口监听并转发到该服务- 但同样,这非常 messy/hacky 并且不是一个好主意。