gpt4 book ai didi

c# - 在服务之间共享数据

转载 作者:行者123 更新时间:2023-11-30 18:39:23 24 4
gpt4 key购买 nike

我需要分解我的双工服务,并希望将大量传输封装到一个服务中并从其他服务中检索。我曾经在一项服务中拥有这一切,但现在需要从缓冲切换到流式传输以考虑大小/内存调节。我看到几个问题herehere但是他们已经很老了

对于服务之间的 IPC,我将使用什么命名管道?

服务 A 公开了两种方法 Guid Upload(stream),Stream Download(Guid) 并使用 net.tcp streaming,这是可行的好吧,

现在我想坚持到Service B?这会是 namedPipe WCF 吗?

Service C --> Business layer --> Service B with Guid,检索并计算item,持久化回B

我的问题是用什么来持久化/Service B

从客户的角度

  1. 客户端调用 ServiceA_Proxy.Upload(someLargeItem) 返回 Guid
  2. 然后客户端调用 ServiceC_Proxy.DoSomeWork(GuidFromCall_1)
  3. 然后客户端调用 ServiceA_Proxy.Download(GuidFromCall_1)
  4. 客户向最终用户展示

最佳答案

是的,您可以将命名管道用作WCF 绑定(bind)只要通信进程在同一台服务器上运行。基本上,您创建 WCF 服务就像使用任何其他绑定(bind)(如 TCP/IP)一样,但您需要配置您的端点以使用 netNamedPipeBinding .

如果你想持久化/保存数据,那么你可以将它保存到文件甚至数据库中,这取决于你的要求。如果您只想保留数据直到 ServiceC 调用它,那么 Dictionary<Guid, SomeLargeItem>就足够了。

所以你的流程看起来像:

  1. 客户端调用 ServiceA_Proxy.Upload(someLargeItem) 返回 Guid
  2. ServiceA 调用 ServiceB_Proxy.Upload(GuidFromCall_1, someLargeItem)
  3. Client 然后调用 ServiceC_Proxy.DoSomeWork(GuidFromCall_1) (您需要先确保上传完成)
  4. ServiceC 调用 ServiceB_Proxy.Download(GuidFromCall_1)
  5. ServiceC 调用 DoSomeWork(GuidFromCall_1)(内部)
  6. ServiceC 调用 ServiceB_Proxy.Upload(GuidFromCall_1, someLargeItemProcessed)
  7. 然后客户端调用 ServiceA_Proxy.Download(GuidFromCall_1)(同样,您需要确保处理完成)
  8. ServiceA 调用 ServiceB_Proxy.Download(GuidFromCall_1),返回给 Client。
  9. 客户向最终用户展示

我不确定我没有把事情搞砸。如您所见,这变得相当复杂。您需要问问自己,这是要走的路吗?以这种方式拆分您的服务是否真的会使其更具可扩展性?您计划使用 NamedPipes,因此所有处理仍将在同一台机器上进行。

您应该真正考虑您的设计。也许将功能拆分为一些 *.dll 并直接调用它们就足够了?这样您将实现层的逻辑分离。从缓冲通信切换到流式通信不需要您将逻辑拆分为更多服务。

如果您想要真正的可扩展性,请考虑使用队列(例如MSMQ)并为每个服务使用单独的机器。

关于c# - 在服务之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10001834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com