2016-06-09 47 views
1

我正尝试使用OracleDBBinding配置WCF服务,以每x分钟从Oracle数据库获取数据。由于绑定配置,这个轮询是自动的。此WCF服务将在远程服务器上运行。将消息从远程WCF服务推送到BizTalk

问题是我如何获得远程WCF服务获取回BizTalk的数据?

在WCF服务中是否有特定的配置来启用它?

我只是在BizTalk中创建一个WCF-basicHTTP接收位置并将该URL指向远程WCF服务?

+1

您可能必须指向正在由BizTalk公开的WCF服务进行轮询的远程WCF服务。 – Dijkgraaf

+0

我猜你在说的是在BizTalk服务器上有两个WCF服务,一个是远程的,另一个是本地的。你如何将远程WCF服务指向本地WCF服务?添加一个额外的绑定来代替oracle数据库绑定? – C4T3

+0

我会查看一个Azure Oracle数据库连接器,例如http://release.nl/606518/azure-oracle-database-connector-a-step-by-step-configuration.html,然后让BizTalk连接到该连接。 – Dijkgraaf

回答

0

如同其他人所说的那样,只需让BizTalk直接轮询Oracle DB就是最佳选择。我会推回你的基础设施团队,找到一种方法来实现这一目标。但是,如果您确实无法获取它,则可以设置远程WCF服务,以便向BizTalk计算机上的侦听器端点发出呼叫。为了尽量减少延迟/通信开销,您可以在BizTalk端使用NetTCP接收位置。以BizTalk的标准方式进行设置,使用WCF服务向导创建IIS应用程序等 - 请参阅https://msdn.microsoft.com/en-us/library/bb728041.aspx)。您的中间服务将成为此服务的客户端。顺序是这样的:

  1. 远程WCF服务调查数据从Oracle
  2. 如果接收到的数据,它连接托特他NetTCP听众在BizTalk
  3. 它然后将数据发送到BizTalk
  4. 的BizTalk地图那里的数据。

请注意,这会不会最终使用MSDTC整个交易 - 如果你的中间服务抛出异常时,BizTalk将没有认识/洞察到,也不会对任何的BizTalk监测工具,你可能会被使用。 (这是为什么最好只是直接让BizTalk轮询)。

就BizTalk而言,这些数据不是来自Oracle,而是来自中间WCF服务。当然,您可以使用看起来像Oracle适配器如何编写XML的模式 - 但这不是必需的。

这是假设您的远程服务已经自己进行轮询(使用System.Threading.Timer或类似的东西)来对付Oracle,并且您都已经设置好了。如果你需要BizTalk来启动轮询事件,那么就没有什么可以处理的。你可以尝试使用Scheduled Task adapter(也许做一个HTTP POST到那个服务?),但是这似乎会更复杂和容易出错。您还可以设置一个始终返回true的SQL轮询适配器(例如,有一个pollingdata可用语句,如SELECT 1),并发布另一个端口侦听并转发到此服务的消息 - 但是,这又非常混乱,并且不是一个好主意。

2

远程WCF服务存在的唯一目的是轮询Oracle数据库并推送到BizTalk吗?

我会让BizTalk直接轮询Oracle数据库(使用OracleDBBinding接收位置),然后根据需要将数据发送到远程WCF服务。

+0

是的,WCF服务的唯一目的是轮询oracle数据库并将其推送到BizTalk。由于基础设施的限制,BizTalk无法直接轮询oracle数据库,它必须通过远程WCF服务。 – C4T3

0

如果您从Oracle检索数据以用于BizTalk应用程序,那么您应该有BizTalk直接轮询数据。意思是说,你不能使用'远程'WCF服务。

oracleDbBinding支持此确切目的的轮询。