从代码中退出 IIS Express 中的 WCF 服务

Exit WCF service in IIS Express from code

正如我在标题中所说,当我们关闭客户端应用程序时,我们如何退出该服务(与客户端应用程序一起启动)?我尝试调用 _serviceClient.CloseAsync() 但 IIS Express 中的服务仍然存在。那我们有什么办法吗?

更新: 我的服务是处理相机并将图像流式传输到客户端。因此,如果我不退出该服务,它将保留摄像头,直到我们手动从 IIS 将其关闭。所以我想一起关闭两侧。

我在应用外 Close-action 中处理了释放相机功能。但有时出乎意料的是,应用程序崩溃了,因此代码不是 运行.

大多数情况下,当发送方不知道侦听器正在终止时,就会出现此问题。例如在 UDP 流中。

一种解决方案是让侦听器发送 "heartbeat" 消息以指示它仍然存在并以特定间隔侦听。如果不再收到心跳,服务器可以断定客户端出于任何原因不再监听并释放资源(停止流、释放摄像头...)。

请注意 UDP 不可靠,因此单个心跳可能会丢失。您必须查看心跳频率和 "missing beats"-容差的完美配置究竟对您和网络有用。

一个常见的模式是实现一个协议,其中客户端必须发送 "acknowledge" - 消息到服务器以指示收到的包(因为流的 UDP 包也可能需要重新发送) .