2

我有这个拓扑:(注意WAS)

每个 Service1 , service2 ...service-n 在 iis 中位于单独的 appdomain 中。 在此处输入图像描述

Service1需要消费。Service2但是他可以service2's通过 nettcp或端点访问http端点。

决定在哪里?(nettcp OT HTTP)

在单独的配置文件中。(在c:\cfg文件夹中,当然 service1 会读取 cfg 以确定他应该访问哪个绑定service2。)

Service2也应该能够看到文件,因为他也使用其他服务。但是让我们谈谈(现在)service1 作为 call service2

cfg 文件中的典型条目是:

key : current_service2_Active_endpoint
val : nettcp

所以这是我的问题:

  • 我需要找到一个解决方案,将 CFG 读入缓存或其他东西,以便service1从缓存中读取 cfg 条目,而不是通过文件系统。但 Service2 也应该读取它,但缓存不会相同(不同的 appdomain)。我该怎么做?我应该在哪里编写代码(上传到缓存)?我只有这 2 个文件:(也许当服务启动时- 但它的代码是什么?)

在此处输入图像描述

  • 我希望 CFG 文件中的每次更改都将条目重新加载到缓存中。这似乎是一项经典cache任务。对文件的缓存依赖似乎是解决方案,但是[n]由于 [n]appDomains....
4

1 回答 1

1

编写一个新的服务,可能称为“CacheService”,它保存缓存怎么样?这应该是一个单实例服务,它只有一个内部和静态的并发字典,其中包含来自缓存的键/值对。

它还应该包含一个“FileSystemWatcher”,以便在 CFG 文件更改时收到通知,然后它可以更新其内部映射。

你所有的服务都会调用这个服务,它应该有一个非常简单的接口('GetConfigSetting(string key)')。您可以在 IIS 中托管此服务,也可以在 Windows 服务中自行托管它(我会选择第二个选项,因为这样它始终处于运行状态)。

您可以将其视为某种基本的分布式缓存。无论如何,它不应该比这更复杂。协议应该是 net.tcp 或事件 net.pipes,因为您希望延迟尽可能低。

于 2012-10-29T09:03:01.863 回答