对于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获得该值。
我尝试了ConfigurationManager
和WebConfiguration
以及HostingEnvironment
。
此外我试过
var hostName = System.Net.Dns.GetHostName();
适用于某些情况,但不适用于此服务器,因为配置的地址不是主要的dns地址,在此处返回。
任何选项?
答案 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;
这更简单!