C#智能组件的健壮体系结构

C#智能组件的健壮体系结构,c#,architecture,C#,Architecture,我正在创建一个用于通信的“智能”组件库。可以使用主控制器进程来创建进程或启动包含通信器的服务。创建的实体由主机分配一个端口号,然后主机可以使用http向其发送XML消息。我的问题是:假设主对象崩溃并重新启动。我可以迭代服务和进程并匹配名称,但如何恢复分配给子进程/服务的端口号 我考虑过将一组对(进程ID和端口#)写入一个隐藏文件中,该文件可以在启动时重新加载,但因为进程ID不一定是唯一的(仅在进程本身的持续时间内),因此看起来并不健壮。我可以从进程中检索端口号,因为我可以查询用于创建端口号的参数

我正在创建一个用于通信的“智能”组件库。可以使用主控制器进程来创建进程或启动包含通信器的服务。创建的实体由主机分配一个端口号,然后主机可以使用http向其发送XML消息。我的问题是:假设主对象崩溃并重新启动。我可以迭代服务和进程并匹配名称,但如何恢复分配给子进程/服务的端口号


我考虑过将一组对(进程ID和端口#)写入一个隐藏文件中,该文件可以在启动时重新加载,但因为进程ID不一定是唯一的(仅在进程本身的持续时间内),因此看起来并不健壮。我可以从进程中检索端口号,因为我可以查询用于创建端口号的参数数组,但这对服务不起作用。关于每个子进程的端口号可以存放在哪里以便我可以恢复它,您有什么想法吗?

服务可以使用参数,您可以查询运行的进程以获取用于启动进程的参数(使用WMI)。

我想您使用的是WCF,在这种情况下,根据您的网络,可能是一个选项

发现API为使用WS-Discovery协议的Web服务的动态发布和发现提供了统一的编程模型。这些API允许服务发布自己,并允许客户端查找已发布的服务。一旦服务被发现,该服务就能够发送公告消息以及侦听和响应发现请求。可发现服务可以发送Hello消息来宣布其到达网络,发送Bye消息来宣布其离开网络。要查找服务,客户端将发送一个探测请求,该请求包含特定条件,如服务合同类型、关键字和网络上的范围。服务接收探测请求并确定它们是否符合条件。如果某个服务匹配,它将通过向客户端发送ProbeMatch消息来响应,该消息包含联系该服务所需的信息


更具体地说,在我看来,您正在尝试重新实现。

HTTP可能是用于此目的的错误协议。你看过MSMQ了吗?是的,我看过队列,有一段时间被他们占据了。如果我能证明体系结构有效,我可能会迁移到它们。我知道我可以从ServiceController获取流程-那么你是说通过ServiceController.Start传入的参数(字符串[]args)可以从流程获取?当然不是?你可能是对的,但是我知道如果我手动启动一个进程或者进程被设置为自动启动,我可以得到它启动时使用的参数(除了在注册表中查找服务)。我不确定
ServiceController.Start()
会有什么不同。我建议你看看。