获取服务的 localhost 的 DNS 条目

Get DNS entry of localhost for service

对于 IIS 托管服务,我必须获取本地计算机的完整地址。

在Web.config那个值配置的很完美

<services>
     <service name="MyService.Service.MyService">
       <endpoint address="" behaviorConfiguration="MexFlatWsdlBehavior"
         binding="basicHttpBinding" bindingConfiguration="secureHttpBinding"
         name="TpsNotification" bindingNamespace="http://org.com/MyService/2014/11"
         contract="MyService.Service.ISomeEndpoint">
         <identity>
           <dns value="THESERVER.myorg.net" />
         </identity>
       </endpoint>
       <endpoint address="" behaviorConfiguration="MexFlatWsdlBehavior"
         binding="basicHttpBinding" bindingConfiguration="secureHttpBinding"
         name="TpsPluginFramework" bindingNamespace="http://org.com/MyService/2014/11"
         contract="MyService.Service.IOtherEndpoint">
         <identity>
           <dns value="THESERVER.myorg.net" />
         </identity>
       </endpoint>
       <host>
         <baseAddresses>
           <add baseAddress="https://THESERVER.myorg.net:443/MyService.svc" />
         </baseAddresses>
       </host>
     </service>
</services>

任何 dns 值baseAddress 都可以。 但我认为无法从 IIS 获得该值。

我尝试了 ConfigurationManagerWebConfiguration 以及 HostingEnvironment

另外我试过了

var hostName = System.Net.Dns.GetHostName();

这适用于某些情况,但不适用于此服务器,因为配置的地址不是此处返回的主 dns 地址。

有什么选择吗?

尝试将配置文件加载到 linq to xml 文档中,然后你可以查询所有你想要的...

var config = XDocument.Load("Web.Config");
var baseAddress = config.Elements("baseAddresses")
    .Elements()
    .First()
    .Attribute("baseAddress")
    .Value;

如果所有其他方法都失败了,请使用蛮力方法:)

另一种选择可能是... 既然你在请求服务器的上下文中,为什么不使用请求对象...

var host = Request.Url.Host;

那更简单!