我正在尝试使用OracleDBBinding配置WCF服务,以便每x分钟从Oracle数据库获取数据。由于绑定配置,此轮询是自动的。此WCF服务将在远程服务器上运行。
问题是如何获取远程WCF服务获取的数据回BizTalk?
WCF服务中是否有特定配置来启用此功能?
我是否只是在BizTalk中创建WCF-basicHTTP接收位置并将URL指向远程WCF服务?
答案 0 :(得分:2)
远程WCF服务是否存在的唯一目的是轮询Oracle数据库并推送到BizTalk?
我会让BizTalk直接轮询Oracle数据库(使用OracleDBBinding接收位置),然后在需要时将数据发送到远程WCF服务。
答案 1 :(得分:0)
如果要从Oracle检索数据以在BizTalk应用程序中使用,那么您应该直接使用BizTalk Poll数据。这意味着,您无法使用“远程”WCF服务。
oracleDbBinding支持轮询以达到这个目的。
答案 2 :(得分:0)
正如其他人所提到的,让BizTalk直接轮询Oracle DB是最佳选择。我会继续推动您的基础架构团队找到实现这一目标的方法。但是,如果您真的无法获得它,则可以设置远程WCF服务以调用BizTalk计算机上的侦听器端点。为了最大限度地减少延迟/通信开销,您可以在BizTalk端使用NetTCP接收位置。从BizTalk以标准方式设置,使用WCF服务向导创建IIS应用程序等 - 请参阅https://msdn.microsoft.com/en-us/library/bb728041.aspx)。您的中间服务将是此服务的客户。序列如下:
请注意,这不会最终使用MSDTC进行整个事务 - 如果您的中间服务抛出异常,BizTalk将无法了解/洞察,也不会使用任何BizTalk监视工具。 (这就是为什么最好直接进行BizTalk民意调查的一部分。)
就BizTalk而言,这些数据不是来自Oracle,它来自中间WCF服务。当然,您可以使用看起来像Oracle适配器如何编写XML的模式 - 但这不是必需的。
这假设您的远程服务已经在自己(使用System.Threading.Timer
或类似的东西)对Oracle进行轮询,并且您已经完成了设置。如果您需要BizTalk来触发轮询事件,那么开箱即用就没有任何东西可以解决这个问题。您可以尝试使用Scheduled Task adapter(可能会对该服务执行HTTP POST吗?),但这似乎更复杂且容易出错。您还可以设置一个始终返回true的SQL轮询适配器(例如,具有类似SELECT 1
的pollingdata可用语句)并发布另一个端口侦听并转发到此服务的消息 - 但同样,这非常凌乱/ hacky并不是一个好主意。