我需要拆分我的双工服务,并希望将大型传输封装到一个服务中并从其他服务中检索。我曾经在一个服务中拥有它,但现在需要从缓冲切换到流式传输以考虑大小/内存容量。 我看过几个问题here和here,但它们已经很老了
我在服务之间使用什么IPC,一个namedPipe?
服务A 公开2个方法Guid Upload(stream)
,Stream Download(Guid)
并使用net.tcp流,这很有效,
现在我想坚持服务B ?这会是namedPipe WCF吗?
服务C - >业务层 - >使用Guid
服务B ,检索并对项目进行计算,并保留回B
我的问题是如何使用持久性/ 服务B
从客户的角度来看
ServiceA_Proxy.Upload(someLargeItem)
返回Guid
ServiceC_Proxy.DoSomeWork(GuidFromCall_1)
ServiceA_Proxy.Download(GuidFromCall_1)
答案 0 :(得分:0)
是的,只要在同一台服务器上运行通信进程,您就可以将命名管道用作 WCF绑定 。基本上,您创建WCF服务就像使用TCP / IP之类的任何其他绑定一样,但是您需要配置端点以使用netNamedPipeBinding
。
如果要保留/保存数据,则可以将其保存到文件甚至数据库,具体取决于您的要求。如果你只是想保留数据,直到ServiceC要求它,那么Dictionary<Guid, SomeLargeItem>
就足够了。
所以你的流程看起来像:
我不确定我是不是搞砸了什么。如您所见,这变得非常复杂。 您需要问问自己这是要走的路,如果以这种方式拆分您的服务真的会让它更具可扩展性吗?您计划使用NamedPipes,因此所有处理仍将在同一台计算机上。
你应该考虑你的设计。也许将功能分成一些* .dll并直接调用它们就足够了?这样您就可以实现图层的逻辑分离。 从缓冲切换到流式传输不需要您将逻辑拆分为更多服务。
如果您想要真正的可伸缩性,请考虑使用队列(例如 MSMQ )并为每项服务分离计算机。