我有这个拓扑:(注意WAS)
每个Service1,service2 ... service-n在iis中位于单独的appdomain中。Service1
需要消耗Service2
。但是,他可以通过service2's
或nettcp
端点访问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)。我该怎么办?我应该在哪里编写代码(上传到缓存)?我只有这2个文件:(也许服务启动了-但是它的代码是什么?)我希望CFG文件中的每个更改-将条目重新加载到缓存中。
这似乎是经典的
cache
任务。对文件的缓存依赖关系似乎是解决方案,但是由于[n]
appDomains,同样会存在[n]
缓存依赖关系。 最佳答案
如何编写一个新的服务(可能称为“ CacheService”)来保存缓存?
这应该是单实例服务,它仅具有一个内部和静态并发字典以及来自缓存的键/值对。
它还应包含一个“ FileSystemWatcher”,以便在CFG文件更改时得到通知,然后可以更新其内部映射。
您所有的服务都将调用此服务,该服务应具有非常简单的界面(“ GetConfigSetting(字符串键)”)。
您可以在IIS中托管该服务,也可以在Windows Service中对其进行自我托管(我会选择第二种方法,因为这样总是可以的)。
您可以将其视为基本的分布式缓存。无论如何,它不应该比这更复杂。
该协议应该是net.tcp或事件net.pipes,因为您希望延迟尽可能短。
关于c# - WCF动态端点和配置依赖性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13118283/