【问题标题】:System process holding WCF TCP port after application using it is closed在使用它的应用程序关闭后持有 WCF TCP 端口的系统进程
【发布时间】:2023-03-03 06:08:24
【问题描述】:

我正在开发一个基于 C# .NET Framework 的 Web 服务库,它在端口 8733 上运行。现在我想快速创建一个控制台应用程序,它可以启动 ServiceHost 实例并托管服务,所以我不需要打开 VS 并对其进行调试以使 Web 服务运行。

这是我的脏控制台应用程序代码:

static void Main()
{
    var host = new ServiceHost(typeof(WebService));
    var bindig = new BasicHttpsBinding();
    host.AddServiceEndpoint(typeof(IWebService), binding, new Uri("https://192.168.0.154:8733"));

    host.Open();

    Console.ReadLine();
}

但是当它遇到host.Open()时会抛出一个异常

System.ServiceModel.AddressAlreadyInUseException: 'HTTP 无法注册 URL https://+:8733/。另一个应用程序已经用 HTTP.SYS 注册了这个 URL。'

内部异常
HttpListenerException:无法侦听前缀“https://+:8733/”,因为它与机器上的现有注册冲突。

所以我想“哦,我只是忘了停止从 Visual Studio 运行的实例”,但不,它已停止。
所以我决定在以管理员身份运行的 PowerShell 窗口中使用netstat 进行调查。执行netstat -a -o -n -b 并将其传递到findstr "8733" 我得到结果

  TCP    0.0.0.0:8733           0.0.0.0:0              LISTENING       4
  TCP    [::]:8733              [::]:0                 LISTENING       4

现在我使用任务管理器搜索 PID 为 4 的进程,瞧:

现在我不知道为什么系统进程会保留 TCP 端口 8733,甚至在重新启动后仍然存在。我现在的问题是这个;如何手动绑定到这个端口?

P.S:回答为什么系统进程持有端口以及从 Visual Studio 运行时 Web 服务如何绑定到它的答案的奖励积分

【问题讨论】:

  • 您确定自己没有安装/运行应用的实际服务版本吗? (系统进程打开 https 端口是正常的。)
  • 您的代码不会停止服务本身。在the class's documemtation example shows 的末尾添加host.Close() 或将对象包装在using 块中
  • @500-InternalServerError 该死,谢谢你的提问。我刚刚再次检查,Visual Studio 不再运行它,但 IIS 仍然注册它......仍然对 Visual Studio 如何仍然托管它感到非常困惑......
  • 我认为这与您在后台获得的监听有关,因为 ServiceHost 在您的性能计数器上注册。 referencesource.microsoft.com/#System.ServiceModel/System/… 而你没有处理它
  • @PanagiotisKanavos 我非常清楚在使用主机时需要关闭主机,但目前我的问题是启动它(直到现在还没有工作)。我的控制台应用程序也在该 Console.ReadLine 之后退出,因此无论如何地址都会被释放

标签: c# .net windows wcf


【解决方案1】:

尝试使用管理员账户运行服务或使用以下命令为特定用户保留URL,使其可以任意占用系统端口。

Netsh http 添加 urlacl url=https://+:8001/MyUriuser=DOMAIN\user

官方文档。
https://docs.microsoft.com/en-us/windows/win32/http/add-urlacl
系统继续占用一个端口,可能是因为我们在IIS中的网站绑定了某个端口。

如果有什么我可以帮忙的,请随时告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-23
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多