WCF 和 REST 应用程序在同一端口上使用不同的端点,可以吗?

Posted

技术标签:

【中文标题】WCF 和 REST 应用程序在同一端口上使用不同的端点,可以吗?【英文标题】:WCF and REST app using different endpoints on the same port, is this ok? 【发布时间】:2020-08-23 10:27:04 【问题描述】:

我有一个在 XXX3 端口上运行多年的 WCF 应用程序(应用程序 A),现在我创建了同一应用程序(应用程序 B)的 RESTful 版本。我最初想在端口 XXX4 上设置应用 B,但我必须处理阻止端口的公司安全策略。

如果我在端口 XXX3 上运行应用 B,它似乎运行良好,而应用 A 似乎也没有任何问题。

我一直认为给定的应用程序应该使用自己的端口...所以我担心如果在同一个端口上,应用程序 A 和 B 之间会发生冲突。我应该担心冲突还是这不是问题?我阅读的所有内容似乎也表明它们应该位于不同的端口上。

最后一条信息...由于应用程序 A 是 WCF 而应用程序 B 是 .NET Core Web api 应用程序,它们都使用不同的端点,所以我怀疑这就是为什么似乎没有任何冲突.是端点本身决定了端口数据的路由位置吗?谁能给出一个简单的网络解释,说明为什么这似乎在同一个端口上与他们一起工作,以及是否可以让它以这种方式运行?

【问题讨论】:

【参考方案1】:

WCF 和 REST 应用程序在同一端口上使用不同的端点,这样可以吗?

TL;DR:是的。

我一直认为给定的应用程序应该使用自己的端口

一般是的。

我应该关注冲突还是这不是问题? 不。托管在 IIS 中的 WCF 应用程序能够共享端口已经有一段时间了。 (下)

现在,当托管在 IIS 上时,WCF 应用能够共享 sometime 的端口。

这就是 MSDN has to say(我的重点):

跨多个 HTTP 应用程序共享端口的能力长期以来一直是 Internet 信息服务 (IIS) 的一项功能。但是,只有在 IIS 6.0 中引入 HTTP.SYS(内核模式 HTTP 协议侦听器)后,该基础结构才完全通用化。实际上,HTTP.SYS 允许任意用户进程共享专用于 HTTP 流量的 TCP 端口。此功能允许许多 HTTP 应用程序在同一台物理机中以单独、隔离的进程共存,同时共享通过 TCP 端口 80 发送和接收流量所需的网络基础设施。Net.TCP 端口共享服务使net.tcp 应用程序的相同类型的端口共享。

同时,.NET Core 应用程序还可以通过 HTTP.sys(ASP.NET Core 中的 Web 服务器实现)从 TCP 端口共享中受益。

MSDN:

HTTP.sys 是 ASP.NET Core 的 Web 服务器,仅在 Windows 上运行。

HTTP.sys 支持以下功能:

Windows 身份验证 端口共享 ...

操作

最后一条信息...由于应用 A 是 WCF 而应用 B 是 .NET Core Web api 应用,它们都使用不同的端点,所以我怀疑这就是为什么似乎没有任何冲突的原因

它们可能有两个不同的逻辑端点,但都可以通过通用 HTTP.SYS 共享 TCP 80。这与托管在 IIS 中的多个 WCF 应用程序都共享 http://xxx:80/<service-suffix> 没有什么不同。

【讨论】:

我想我应该澄清一下这些是自托管的,不是在 IIS 下运行的,但这并没有改变他们使用 HTTP.SYS 的事实。看起来你一针见血……我知道它在工作,但不知道为什么,现在我知道这是由于 HTTP.SYS Web 服务器实现! @eerick 没关系。是的,.NET Core 通常想做自己的事情并且是跨平台的,所以它不想依赖 IIS。太好了'Core 使用共享的 HTTP.SYS,所以每个人都相处融洽。 :) 感谢您接受

以上是关于WCF 和 REST 应用程序在同一端口上使用不同的端点,可以吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 WCF REST Web 服务上启用 HTTPS

跨域 jQuery Ajax 请求和 WCF REST 服务

如何将 REST 与 Node.js 和 AngularJS 一起使用在不同的端口上?

如何在 WCF 4.0 REST 服务上启用基本身份验证?

BizTalk WCF-WebHTTP REST 客户端与正文和标题签名与静态端口

如何同时使用 SOAP WCF 服务和 REST API