在多个绑定上托管 IIS 站点时如何获取正确的本地地址 URI?

Posted

技术标签:

【中文标题】在多个绑定上托管 IIS 站点时如何获取正确的本地地址 URI?【英文标题】:How to get the correct local address URI when hosting IIS site on multiple bindings? 【发布时间】:2019-12-15 01:23:53 【问题描述】:

我在 IIS 中配置了一个具有多个端口绑定的简单服务。 无论调用哪个端口,当前通道本地地址始终相同。

.


[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class TestService : ITestService

  public string Test()
  
    return OperationContext.Current.Channel.LocalAddress.Uri.Port.ToString();
  


调用testHost2:7772 -> 返回7772

调用testHost1:7771 -> 也返回7772

【问题讨论】:

【参考方案1】:

您可以使用以下代码通过 WCF 获取主机名和端口:

var test = OperationContext.Current.Host.BaseAddresses[0].Authority;

Uri uri = OperationContext.Current.IncomingMessageHeaders.To ;

【讨论】:

OperationContext.Current.IncomingMessageHeaders.To.Port 返回 7772,OperationContext.Current.Host.BaseAddresses 包含两个地址,但我找不到调用的地址,就像 IIS 总是重定向到第一个端点 @JalpaPanchal 使用这个“OperationContext.Current.IncomingMessageHeaders.To”不要添加“port”。 这有什么不同? To 返回包含第一个绑定而不是第二个绑定的 URI 对象。无论调用什么端点。 你试过“var test = OperationContext.Current.Host.BaseAddresses[0].Authority;” BaseAddresses 包含这两个绑定,但我不知道如何确定哪一个被称为BaseAddresses[0]BaseAddresses[1]

以上是关于在多个绑定上托管 IIS 站点时如何获取正确的本地地址 URI?的主要内容,如果未能解决你的问题,请参考以下文章

IIS8 - 在同一台服务器上托管 SSL 和非 SSL 站点

WCF net.tcp 绑定:托管多个服务是不是需要端口共享?

IIS 中的多个站点。 HTTPS 冲突

访问本地 IIS 上托管的 WCF 服务时出错:“相对 URI 不支持此操作。”

在一个 IP 上托管多个 Golang 站点并根据域请求提供服务?

如何在实际服务器上托管使用 laravel 5 制作的网站?