WCF动态端点和配置依赖?

时间:2012-10-29 08:43:44

标签: c# .net wcf .net-4.0 iis-7.5

我有这种拓扑结构:(注意WAS)

每个Service1,service2 ... service-n位于iis的单独appdomain中。 enter image description here

Service1需要使用Service2。但是,他可以通过service2'snettcp端点访问http个端点。

决定在哪里? (nettcp ot http)

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

Service2也应该能够看到该文件,因为他也消耗其他服务。但我们可以谈谈(现在)约service1作为调用service2

cfg文件中的典型条目是:

key : current_service2_Active_endpoint
val : nettcp

所以这是我的问题:

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

enter image description here

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

1 个答案:

答案 0 :(得分:1)

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

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

您的所有服务都会调用此服务,该服务应具有非常简单的界面('GetConfigSetting(string key)')。 您可以在IIS中托管此服务,也可以在Windows服务中自托管它(我会选择第二种方式,因为这种方式总是很快)。

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