wcf - 不要从按键中关闭 WCF 服务主机
问题描述
我们创建了一个服务主机控制台应用程序,该应用程序需要用户击键来关闭它,代码片段如下:
........
host.Open();
Console.WriteLine($"The service is ready {host.Description.Endpoints?.FirstOrDefault()?.Address.Uri.ToString()}");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
Console.WriteLine("<ENTER> pressed, about to Shutdown Service Host ...");
host.Close();
Console.WriteLine("Service Host is closed");
.......
我想删除用户干预以关闭主机并保持打开状态。评论 host.Close() 行会确认它仍然打开吗?
- - - - - - - - - - - - - - - -更新 - - - - - - - - - --------------------
我之前的帖子可能不够清楚。我期待机器对机器的交互来启动和停止 WCF 服务主机,而不是人机交互。我们目前的解决方案基于以下几点:
我们面临的问题是基于上述解决方案的.exe在启动某个端点地址的通道后立即关闭。很明显 ENTER 以某种方式被按下
以下是我们所面临的可能的解决方案吗?
解决方案
您只需要删除 host.Close()。host.Close() 方法将使通信对象从其当前状态转换为关闭状态。有关 ServiceHost 类的更多信息,您可以参考此链接。
更新:
只要不运行 host.Close(),WCF 服务在正常情况下将保持打开状态。如果 WCF 服务托管在 Windows 服务中,我们可以通过运行 Windows 服务或停止 Windows 服务来启动和关闭 WCF 服务。
WCF 也可以托管在 IIS 中。IIS 中托管的 WCF 服务就像一个 Web 应用程序。只要站点处于启动状态,WCF 服务就会一直运行。
有关“在 IIS 中托管 WCF 服务”的更多信息,您可以参考此链接。
推荐阅读
- algorithm - 使用 EM 算法填充多个缺失数据
- python - django URL 翻倍
- c++ - 取消定义和重新定义 __cplusplus 宏
- apache-flink - Apache Flink:REST API 检索指标值
- python - Python 迁移:找不到记录器“root”的处理程序
- java - JSONObjectRequest 无法用数据填充对象
- javascript - 如何在表单完成之前禁用 Stripe 付款请求按钮?
- html - 如何在其父 div 中调整 SVG 文件的大小、居中对齐并使其响应?
- php - php如何获取xml标签
- mysql - 如何获取一天收入大于或等于前一天收入的人的详细信息