2014-10-01 63 views
0

我被要求构建一个将由ESB进程使用的Web服务(IIS托管),并且Web服务需要针对3个独立的数据库运行3个查询以收集所需的数据。一旦收集完成,WS中会发生一些高级转换(因此我们不直接在具有有限转换能力的ESB流程内转换)。WCF Web服务中的多个数据库查询?

我的问题是......它被看作是一种可接受的方法在Web服务中运行3个数据库查询?如果没有其他方法将被推荐?

我很欣赏更多的数据块我查询,潜在的可靠性能降低,但我们有负载均衡和集群DB农场所以一般的Web服务应始终能够连接到数据库服务器上的方法

的思考?

+0

三个问题。首先,有多少人会执行这个Web服务,其次是他们多久执行一次这个Web服务,第三,数据是否需要实时数据? – Icemanind 2014-10-01 21:12:45

+0

嗨,1)只是一个ESB过程(没有人),2)服务可能每隔几分钟就会调用一次,3)是数据必须是实时的,我们不能缓存任何东西 – Developr 2014-10-01 21:22:13

回答

0

由于您无法实现任何类型的缓存,因此您的需求似乎决定了您查询三个不同的来源。

至于最好的办法,我会考虑Parallel Tasks,其中你甚至可以在任务上使用CancellationToken来设置超时,以确保你不超过WCF响应超时。

+0

是的并行任务是我也在看:)虽然如果我是诚实的,我最初的想法是在每个连接的连接字符串中使用连接超时参数并将其设置为低(即,与默认值15相反),以尝试保持响应时间只是'万一'数据库无法访问。 – Developr 2014-10-01 21:53:45

+0

为什么每个人都会立即参加并行任务和类似的“创新”:)。为每个查询启动3个线程,然后等待它们使用'Join()'完成(如果您想要放一个,它也接受超时)有什么问题? :) – xpa1492 2014-10-02 03:10:31

+0

@Developr您可能还想设置数据库连接超时,但除非您使用单独的线程,否则必须等待所有呼叫的总数。 – landoncz 2014-10-02 13:03:59

0

这取决于你的任务。如果您不需要保证ACID,则可以对三个数据库使用三个查询。

如果您需要使用交易,您可以使用transactions in WCF services。但请注意,交易意味着是短暂的,流动交易可能会增加交易时间。