在 WCF 中获取调用者的主机名

Posted

技术标签:

【中文标题】在 WCF 中获取调用者的主机名【英文标题】:Getting caller's hostname in WCF 【发布时间】:2010-10-08 15:17:44 【问题描述】:

我正在用 WCF 服务替换现有的 Web 服务,作为迁移的第一步,我将使用 BasicHttpBinding 公开一个端点,直到今年晚些时候升级客户端。

计划是使用 Windows 服务托管新的 WCF 服务(该服务只会从 Intranet 中调用,因此实际上不需要 HTTP),但同时公开 Basic HTTP 和 Net.TCP 端点,以便迁移可以分阶段进行。

但是,我在 WCF 服务中获取调用者的主机名时遇到了一些问题,查看当前使用 Context.Request.UserHostName 获取主机名的 Web 服务代码。我已设法获取调用者的用户名和 IP 地址,但环境中的所有相关权限/安全服务都使用主机名而不是 IP,那么我有什么方法可以在我的服务中获取主机名吗?

附:我已将安全模式设置为 TransportCredentialOnly,并将 clientCredentialType 设置为 Windows

【问题讨论】:

【参考方案1】:

由于您不是在 IIS 中托管,因此您无法使用 ASP.NET compatibility mode 访问通常存在于 ASP.NET 进程中的 HttpContext

相反,您可以在System.Net namespace 中的Dns class 上使用GetHostEntry method 来获取IPHostEntry instance,其中将包含您正在获取的IP 地址的别名(DNS 名称)。

【讨论】:

以上是关于在 WCF 中获取调用者的主机名的主要内容,如果未能解决你的问题,请参考以下文章

WCF 服务慢速调用取决于调用者

自托管 WCF 服务和 basicHttpBinding:绑定不提供表示调用者的 Windows 标识

WCF 错误:调用者未通过服务的身份验证

我可以使用调用者的信用来打数据库的 WCF 调用吗?

更改 WCF 服务以与 .NET Framework 和 .NET Core 调用者兼容

如何在被调用的方法中获取调用者的方法名?