获取localhost的DNS条目以进行服务

时间:2015-01-20 10:08:52

标签: c# wcf iis service dns

对于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地址,在此处返回。

任何选项?

1 个答案:

答案 0 :(得分:0)

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

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

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

另一种选择可能是...... 由于您处于对服务器的请求的上下文中,为什么不使用请求对象...

var host = Request.Url.Host;

这更简单!